Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > POST на сайт


Автор: ishimcity 10.2.2009, 19:02
Уважаемые ребята. Подскажите пожалусто как это дело можно отправить на сервер?

Код

<form action="" name="msgForm" method="POST" enctype="multipart/form-data">
  <input type="hidden" name="owner_site_id" value="1144" />
  <input type="hidden" name="control_id" value="0105567011" />
  <input type="hidden" name="owner_site_hash" value="" />
  <input type="hidden" name="action" value=""/>
  <input type="hidden" name="mode" value=""/> 
  <input type="hidden" name="page" value="" />
  <input type="hidden" name="delay_time" value=""/>
  <input type="hidden" name="offset_time" value=""/>
  <input type="hidden" name="message_text_trans" value=""/>
  <input type="hidden" name="subsc_pwd" value="" />
  <input type="hidden" name="phone_prefix" value=""/>
  <input type="hidden" name="phone_number_list" value=""/>
  <input type="hidden" name="images" value=""/>
  <input type="hidden" name="sounds" value=""/>
  <input type="hidden" name="user_img" value=""/>
  <input type="hidden" name="user_snd" value=""/>


я понимаю что это делается через массив но что то неполучаеться.
Спасибо

Автор: Snowy 10.2.2009, 19:25
Код

var
  ASource: TIdMultiPartFormDataStream;
begin
  ASource := TIdMultiPartFormDataStream.Create;
  ASource.AddFormField('owner_site_id', '1144');
  ASource.AddFormField('control_id', '0105567011');
  ...
  ASource.AddFormField('user_snd', '');
  IdHTTP1.Post('http://www.site.ru/myform.php', ASource);
  ASource.Free;
end;
где http://www.site.ru/myform.php - это адрес, указанный в form action=""
Вместо пустоты должен быть указан относительный адрес, который нужно привести к полному.

Автор: ishimcity 10.2.2009, 20:36
Snowy  спасибо огромное. я в принципе так и делал. но увы что то нетак.
я обясню принцим моей идеи, есть сайт http://www.tumen.u-tel.ru/content/mmssend который отправляет ммс.
хочу организовать с делфи все это.
прости вот это я непонял что ты имел ввиду "Вместо пустоты должен быть указан относительный адрес, который нужно привести к полному."

Автор: Snowy 10.2.2009, 20:48
Думаю, в данном случае полный адрес как раз и будет http://www.tumen.u-tel.ru/content/mmssend
То есть страница вызывает саму себя, но уже с данными.
Просто там всё неоднозначно - форма скрыта и заполняется джаваскриптом, который её меняет.

Автор: ishimcity 11.2.2009, 06:03
Я делаю так:
Получаю все переменные и загружаю файл на сайт

Код

const
ot = 'http://mmsuser.u-tel.ru/ctrlimg/?c='; // 10 последних циферок
co = 'control_id" value="'; //это надо для POST
var
txt,txt1,ss,lres,txt2,ott,z,models,ris: string;
sPos, fPos,spos1,fpos1,lpos,lpos2,spos2,fpos2,c,r: Integer;
ltxt,ltxt1,ltxt2: Integer;
lStream: TMemoryStream;
jpg: TJPEGImage;
begin
st:=TIdMultiPartFormDataStream.Create;
st.AddFile('image_path',a,'image/jpeg');// гружу картинку на сервер ,а - здесь путь к картинке
HTTP.AllowCookies :=true;
HTTP.HandleRedirects := True;
txt:=HTTP.Post('http://www.tumen.u-tel.ru/content/mmssend',st);
st.Free ;
 sPos := Pos(ot, txt);
  if sPos > 0 then
    begin
      ltxt := Length(ot);
      Inc(sPos, ltxt);
      fPos := sPos;
      while (fPos <= ltxt) and (txt[sPos] <> '"')
        do Inc(fPos);
      ris:=Copy(txt, sPos, 10); // нашли 10 цифирок
       sPos := Pos(co, txt);
  if sPos > 0 then
    begin
      ltxt := Length(co);
      Inc(sPos, ltxt);
      fPos := sPos;
      while (fPos <= ltxt) and (txt[sPos] <> '"')
        do Inc(fPos);
      ris1:=Copy(txt, sPos, 10); // нашли переменную control_id
      l2.Caption :=ris1;
        if ris <> '' then
        begin
          lStream := TMemoryStream.Create;
             Jpg:=TJpegImage.Create ;
          try
            HTTP.Get(ot + ris , lStream);
            lStream.Position := 0;
           Jpg.LoadFromStream(lStream);
            Image1.Picture.Bitmap.Assign(jpg);// вывожу картинку для поддтверждения
          finally

            lStream.Free;

    end;
        end;


    end;

    end;
end;


далее делаю POST

Код

st:=TIdMultiPartFormDataStream.Create;
st.AddFormField('owner_site_id','1144');
st.AddFormField ('control_id',ris1);
st.AddFormField ('action','ins'); // -> что здесь? или адрес  http://www.tumen.u-tel.ru/content/mmssend
st.AddFormField ('mode','insMms');
st.AddFormField('phone_number','Номер телефона');//телефон №
st.AddFormField('message_text','Приветик от друга'); // сообщение
st.AddFormField('confirm_code',Edit1.Text ); // код подтверждения
st.AddFormField('images',a); // а - здесь путь к картинке
idHTTP1.AllowCookies :=true;
idHTTP1.Post('http://www.tumen.u-tel.ru/content/mmssend',st);
end;


ну вот так

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)