Конференция "Сети" » Подкажите как POST запрос в IdHTTP [D7, WinXP]
 
  • DriveR_F (06.12.06 21:19) [0]
    Имеется вот такой код в JavaScript:

    <form method="post" action="http://smorye.apeha.ru/index.zhtml">
    <input type="hidden" name="actUser-MLogin" value=1>
     <input type="text" name="user{nick}">
     <input type="text" name="user{password}">
    </form>

    Подскажите товарищи знатоки как мне сделать точно такой же через компонент IdHTTP
  • Dmitrij_K (06.12.06 21:37) [1]
    sl := TStringList.Create;
    sl.Add('actUser-MLogin=1');
    sl.Add('user{nick}=???');
    sl.Add('user{password}=***');
    IdHTTP1.Post('http://smorye.apeha.ru/index.zhtml", sl);

  • Орион © (06.12.06 21:45) [2]
    > Имеется вот такой код в JavaScript:

    серьезно? всю свою недолгуб жизнь думал, что это html.
  • DriveR_F (06.12.06 21:53) [3]

    > sl := TStringList.Create;
    > sl.Add('actUser-MLogin=1');
    > sl.Add('user{nick}=???');
    > sl.Add('user{password}=***');
    > IdHTTP1.Post('http://smorye.apeha.ru/index.zhtml", sl);


    Пробовал этот код, но как и раньше выдает ошибку HTTP/1.0 400 Bad Request
  • DriveR_F (06.12.06 22:10) [4]
    Все сделал, ошибка больше не вылазит, но и доступ я так и не получил...
  • Dmitrij_K (06.12.06 22:43) [5]

    > но и доступ я так и не получил...


    Надо куки запоминать
  • DriveR_F (06.12.06 23:22) [6]

    > Надо куки запоминать

    Приведите пожалуйсто пример работы с куками
  • Dmitrij_K (06.12.06 23:46) [7]
    Подключи CookeManager (вкладка Indy Misc) к IdHTTP
  • DriveR_F (07.12.06 00:24) [8]

    > Подключи CookeManager (вкладка Indy Misc) к IdHTTP

    Хм... Он у меня подключен... А работать то с ним как?
  • Dmitrij_K (07.12.06 08:29) [9]
    Никак, он сам работает если Active включить
  • DriveR_F (09.12.06 20:18) [10]
    Благодарю, вроде все получилось)
  • DriveR_F (09.12.06 20:18) [11]
    Благодарю, вроде все получилось)
  • DriveR_F (10.12.06 21:20) [12]
    Я использую Indy 10, там в CookieManager нет своиства Active, полагаю он включен по умолчанию... Но есть такая проблема, я захожу на одну страницу авторизованым, если перехожу на другую ссылку то авторизация теряется... Подскажите что сделать что бы авторизация не терялась?
  • S(p)@wN © (22.02.07 18:32) [13]

    > DriveR_F   (06.12.06 22:10) [4]
    > Все сделал, ошибка больше не вылазит, но и доступ я так
    > и не получил...

    Доброго времени суток! Можно узнать как избавился от ошибки 400?
  • S(p)@wN © (22.02.07 18:34) [14]

    > DriveR_F   (06.12.06 22:10) [4]
    > Все сделал, ошибка больше не вылазит, но и доступ я так
    > и не получил...

    Доброго времени суток! Можно узнать как избавился от ошибки 400?
  • S(p)@wN © (22.02.07 18:35) [15]
    Извиняюсь, за два сообщения, браузер затупил..
  • Flores (23.03.07 08:17) [16]
    Заставить менеджер куков работать:
    ©Не моё, найдено в инернете.
    procedure TForm1.IdCookieManager1NewCookie(ASender: TObject;
     ACookie: TIdCookieRFC2109; var VAccept: Boolean);
    begin
     VAccept := true;
     if ACookie.Path='' then ACookie.Path:='/';
    end;

  • SayatKZ © (02.04.07 14:18) [17]
    Здарова мужики!!!
    У меня такая задача:
    надо сделать прогу которая работала бы как прокси,
    использую TidHTTPServer и TidHTTP.
    Когда browser обращается к TidHTTPServer, тот передает URL на TidHTTP,
    TidHTTP полученную страницу обратно передает на TidHTTPServer и он его
    возвращает browseru.

    procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
     ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
    begin
    AResponseInfo.ContentText:=IdHTTP1.Get(ARequestInfo.RawHTTPCommand);
    end;

    но рисунки не идут. почему?
    и как можно получить параметры метода POST у TidHTTPServer?
  • malor (30.05.07 13:26) [18]
    Я отправляю данные методом POST. Набираю в переменную Query типа TStrings различную информацию строками
    Query.Append('<?xml version="1.0" encoding="windows-1251"?>');
    Query.Append('<root>');
    Query.Append('<auth uid="1" pwd="password" vp="2"/>');
    ....и т.д. ...........

    затем :
    ResultQuery := HTTP.Post(AdressScripta, Query);
    Анализ ResultQuery показал, что отправленные мной данные не верны. Тогда я вывел переменную Query в поле Memo:
    mmPolya.Lines:=Query;
    Увидел вместо вышеприведенных строк такие:
    <?xml version=%221%2E0%22+encoding%3D%22windows%2D1251%2 2%3F%3E
    <root>
    <auth uid=%221%22+pwd%3D%22password%22+vp%3D%222%22%2F%3 E

    Почему он заменил симолы кавычек, уголков и прочего на коды?

    Delphi7
  • Anatoly Podgoretsky © (30.05.07 14:00) [19]
    > malor  (30.05.2007 13:26:18)  [18]

    Потому что RFC
  • SlymRO © (30.05.07 16:24) [20]
    А так?:
    var Query:TStringStream;
    AdressScripta,ResultQuery:string;
    begin
     Query:=TStringStream.Create('');
     try
       Query.WriteString('<?xml version=\"1.0\" encoding=\"windows-1251\"?>');
       Query.WriteString('<root>');
       Query.WriteString('<auth uid=\"1\" pwd=\"password\" vp=\"2\"/>');
       Query.WriteString('....и т.д. ...........');
       ResultQuery :=HTTP.Post(AdressScripta,Query);
     finally
       Query.Free;
     end;
    end;

  • malor (30.05.07 16:27) [21]
    RFC 2068 3.6 Кодирование передачи (Transfer Codings).
    http://www.lib.ru/WEBMASTER/rfc2068/section-3.html#p2-2 .
    "Значения кодирования передачи используются для указания преобразования кодирования, которое было или должно быть применено к телу объекта (entity-body) в целях гарантирования "безопасной передачи" по сети. Оно отличается от кодирования содержимого тем, что кодирование передачи - это свойство сообщения, а не первоначального объекта."
    Вы этот кусок имели ввиду?

    Если помещаю строку mmPolya.Lines:=Query;  до строки
    ResultQuery := HTTP.Post(AdressScripta, Query);
    то в поле Memo вижу строки :
    <?xml version="1.0" encoding="windows-1251"?>
    <root>
    <auth uid="1" pwd="password" vp="2"/>
    ...........и т.д. ...........................

    т.е. все нормально. А если вывод в Memo делать после отправки данных методом POST, то как раз и увидим:
    <?xml version=%221%2E0%22+encoding%3D%22windows%2D1251%2 2%3F%3E
    <root>
    <auth uid=%221%22+pwd%3D%22password%22+vp%3D%222%22%2F%3 E
    Это означает, что метод POST изменяет содержимое Query?
  • SlymRO © (30.05.07 16:58) [22]
    malor   (30.05.07 16:27) [21]
    Это означает, что метод POST изменяет содержимое Query

    Это означает, что метод POST с параметрами(string,TStrings) использован не по назначению... а назначение такое:
    Передать серверу параметры и их значения из листа вида
    параметр1=значение1
    параметр2=значение2
  • malor (31.05.07 15:30) [23]
    Вспомнил, что в проге есть место тоже где отправляется инфа методом POST, и в том случае все прошло гладко. Кусок такой:
    Query.Append('XML_Query=<?xml version="1.0" encoding="windows-1251"?><root><auth uid="1" pwd="password" vp="2"/><cmd id="1"/></root>');
    Result:=HTTP.Post(AdressScripta,Query);

    Я решил, чтоб в Query было не несколько строк, а одна; для этого стал собирать все в String'овую переменную stpost:
    stpost:='';
    stpost:=stpost+'XML_Query=<?xml version="1.0" encoding="windows-1251"?><root><auth uid="1" pwd="password" vp="2"/><cmd id="1">';
    ........и т.д..................
    Query.Append(stpost);
    ResultQuery := HTTP.Post(AdressScripta, Query);
    mmPolya.Lines.Clear;
    mmPolya.Lines:=Query;

    У чела на сервере данные, переданные POST'ом нормально пропарсились(libxml2).
    Почему только все-таки, то что вывелось в Memo поле, даже сейчас имеет вид :
    XML_Query=%3C%3Fxml+version%3D%221%2E0%22+encoding%3D%22windows%2D1251%22%3F%3E%3Croot%3E%3Cauth
    +uid%3D%221%22+pwd%3D%22password%22+vp%3D%222%22%2F%3E%3Ccmd+id%3D%22333%22%3E%3C
    т.е. с процентными кодами символов?
  • realt © (10.08.07 16:01) [24]
    Народ, вот такой вопрос: Доустим мне надо передать вот такой ПОСТ запрос:
    http://somesite.com/script.php?c=Привет. Script.php отправит мне слово привёт на мыло. Но гогда я послаю запрос с помощью idhttp то приходит  не в той кодировке. КАк изменить?
  • SpellCaster (15.08.07 12:58) [25]
    Кодируй символы в стиле %3D%22, в скрипте юзай url_decode
  • Venkin (09.11.07 15:23) [26]
    Здравствуйте!
    пишу программу, чтобы заходить на сайт, используя логин и пасс.
    вариант1.


    procedure TForm1.Button1Click(Sender: TObject);
    var list: TStringList;
    response: TStringStream;
    begin
    response:=TstringStream.Create('');
    list := TStringList.Create;
    list.Add('req_username=rapget');
    list.Add('req_password=123456');
    try
    IdHTTP1.Post('http://usd.mybb.ru/login.php',list,Response);
    memo1.lines.text := response.DataString;
    finally
    list.Free;
    response.free;
    idHTTP1.Disconnect;
    end;
    end;



    к idhttp1 привязан куки-манагер (в инспекторе объектов выбрал)
    в ответ получаю html в котором страница логина с пустыми полями, т.е. результат нулевой.

    вариант 2:


    function UrlEncode(const S:string;NeedUTF8:boolean=false):string;
    var I:integer; W:UTF8String;
    begin
    Result:='';
    if NeedUTF8 then W:=Utf8Encode(S) else W:=S;
    For I:=1 to Length(W) do case W[I] of
     '%',' ','&','=','@','.',#13,#10,'+',#128..#255:Result:=Result+'%'+inttohex(ord(W[I]),2);
     else Result:=Result+W[I];
    end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var Source:TStringStream;
    Fin:TFileStream;
    begin
    Source := TStringStream.Create(Format('req_username=%s&req_password=%s',[URLEncode('rapget'),
    URLEncode('123456')]));
    Fin:= TFileStream.Create('c:\rapget.html', fmOpenWrite);
    Http.Request.ContentType:='application/x-www-form-urlencoded';
    try
    Http.Post('http://usd.mybb.ru/login.php',Source,Fin);
    finally
    source.Free;
    fin.Free;
    end;
    end;



    к компоненту http привязан куки-манагер, koторый принимает куки.
    ответ - html как и в первом варианте, т.е. - не заходит.
    с помощью TCPTrace посмотрел запрос-ответ через браузер, вот они:


    POST http://usd.mybb.ru/login.php?action=in HTTP/1.1
    Host: usd.mybb.ru
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: en,en-us;q=0.8,de-de;q=0.5,de;q=0.3
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Proxy-Connection: keep-alive
    Referer: http://usd.mybb.ru/login.php
    Cookie: mybb_ru=MXw2NmNkYjI3MjdiZmEzZjUyODIzYTQyNGFhMjViNDJiYWRjYWU2YTM3
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 96

    form_sent=1&redirect_url=index.php&req_username=rapget&req_password=123456&login =%C2%EE%E9%F2%E8GET http://usd.mybb.ru/index.php HTTP/1.1
    Host: usd.mybb.ru
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: en,en-us;q=0.8,de-de;q=0.5,de;q=0.3
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Proxy-Connection: keep-alive
    Cookie: mybb_ru=Nnw4YzY5M2M4NmRiNTMwM2JkNmRkYmMyZGZiMzE2MGYxYTlmM2Q2NDVm
    If-Modified-Since: Thu, 08 Nov 2007 09:20:12 GMT



    пост получился большим(постарался дать побольше инфы). как решить эту проблему, подскажите пожалуста.
  • skdon (10.11.07 21:11) [27]

    > в ответ получаю html в котором страница логина с пустыми
    > полями, т.е. результат нулевой.


    begin
    IdCookieManager1:= TIdCookieManager.Create(nil);
    idHTTP1 := TidHTTP.Create(nil);
    IdHTTP1.AllowCookies:=true;
    IdHTTP1.CookieManager:= IdCookieManager1;
    IdHTTP1.HandleRedirects:= true;
    Send:= TStringList.Create;
    Otvet:= TStringList.Create;
    otvet.Text:=Idhttp1.Get('http://xxx.ru/index.php');
    Send.Add('login_name=login');
    Send.Add('login_password=pass');
    Send.Add('login=submit');
    Send.Add('image.x=20');
    Send.Add('image.y=10');
    Otvet.Text:=IdHTTP1.Post('http://xxx.ru/index.php', Send);
    Otvet.Clear;
    end;

    Так работает :)
  • Venkin (10.11.07 22:31) [28]
    skdon

    >
    > Так работает :)


    увы нет, возвращает индексную страницу, а на форум не входит.. :( :( :(

    [B]Send.Add('image.x=20');
    Send.Add('image.y=10');[/B]

    а это что означает?
  • имя (29.12.07 05:12) [29]
    Удалено модератором
  • имя (31.12.07 22:39) [30]
    Удалено модератором
  • имя (31.12.07 22:39) [31]
    Удалено модератором
  • имя (04.01.08 03:13) [32]
    Удалено модератором
  • имя (05.01.08 15:20) [33]
    Удалено модератором
  • имя (05.01.08 18:39) [34]
    Удалено модератором
  • имя (05.01.08 18:40) [35]
    Удалено модератором
  • имя (05.01.08 18:41) [36]
    Удалено модератором
  • имя (05.01.08 18:41) [37]
    Удалено модератором
  • имя (05.01.08 18:42) [38]
    Удалено модератором
  • имя (05.01.08 18:43) [39]
    Удалено модератором
  • имя (05.01.08 18:44) [40]
    Удалено модератором
  • имя (07.01.08 02:18) [41]
    Удалено модератором
  • имя (07.01.08 02:19) [42]
    Удалено модератором
  • имя (07.01.08 02:50) [43]
    Удалено модератором
  • имя (07.01.08 02:50) [44]
    Удалено модератором
  • имя (07.01.08 08:51) [45]
    Удалено модератором
  • имя (07.01.08 08:51) [46]
    Удалено модератором
  • имя (07.01.08 08:51) [47]
    Удалено модератором
  • имя (07.01.08 08:51) [48]
    Удалено модератором
  • имя (07.01.08 08:52) [49]
    Удалено модератором
  • имя (07.01.08 08:52) [50]
    Удалено модератором
  • имя (07.01.08 08:52) [51]
    Удалено модератором
  • имя (07.01.08 08:52) [52]
    Удалено модератором
  • имя (07.01.08 08:52) [53]
    Удалено модератором
  • имя (07.01.08 08:52) [54]
    Удалено модератором
  • имя (07.01.08 08:52) [55]
    Удалено модератором
  • имя (07.01.08 08:52) [56]
    Удалено модератором
  • имя (07.01.08 08:53) [57]
    Удалено модератором
  • имя (07.01.08 08:53) [58]
    Удалено модератором
  • имя (07.01.08 08:53) [59]
    Удалено модератором
  • имя (07.01.08 08:53) [60]
    Удалено модератором
  • имя (07.01.08 08:53) [61]
    Удалено модератором
  • имя (07.01.08 08:58) [62]
    Удалено модератором
  • имя (07.01.08 09:05) [63]
    Удалено модератором
  • имя (07.01.08 09:05) [64]
    Удалено модератором
  • имя (07.01.08 09:06) [65]
    Удалено модератором
  • имя (07.01.08 09:06) [66]
    Удалено модератором
  • имя (07.01.08 09:10) [67]
    Удалено модератором
  • имя (07.01.08 10:02) [68]
    Удалено модератором
  • имя (07.01.08 10:02) [69]
    Удалено модератором
  • имя (07.01.08 10:02) [70]
    Удалено модератором
  • имя (07.01.08 10:02) [71]
    Удалено модератором
  • имя (07.01.08 10:03) [72]
    Удалено модератором
  • имя (07.01.08 11:04) [73]
    Удалено модератором
  • имя (07.01.08 11:05) [74]
    Удалено модератором
  • имя (07.01.08 11:05) [75]
    Удалено модератором
  • имя (07.01.08 11:05) [76]
    Удалено модератором
  • имя (09.01.08 11:50) [77]
    Удалено модератором
  • имя (09.01.08 11:50) [78]
    Удалено модератором
  • имя (09.01.08 11:51) [79]
    Удалено модератором
  • имя (09.01.08 11:51) [80]
    Удалено модератором
  • имя (09.01.08 11:51) [81]
    Удалено модератором
  • имя (09.01.08 11:52) [82]
    Удалено модератором
  • имя (09.01.08 11:52) [83]
    Удалено модератором
  • имя (09.01.08 11:56) [84]
    Удалено модератором
  • имя (09.01.08 11:57) [85]
    Удалено модератором
  • имя (09.01.08 15:24) [86]
    Удалено модератором
  • имя (09.01.08 15:25) [87]
    Удалено модератором
  • имя (09.01.08 15:25) [88]
    Удалено модератором
  • имя (09.01.08 15:25) [89]
    Удалено модератором
  • имя (09.01.08 15:25) [90]
    Удалено модератором
  • имя (09.01.08 15:26) [91]
    Удалено модератором
  • имя (09.01.08 15:26) [92]
    Удалено модератором
 
Конференция "Сети" » Подкажите как POST запрос в IdHTTP [D7, WinXP]
Есть новые Нет новых   [119109   +106][b:0.001][p:0.004]