[Delphi]Synapse Bad request 400

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cheater_man, 5 May 2012.

  1. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Вобщем решил попробовать synapse. И сразу столкнулся с проблемой
    Сначала делаю гет все проходит норм.
    потом делаю пост и в снифере вижу это
    [​IMG]
    Что за лажа? До этого кодил под инди, вининет с таким не встречался. Какие-то левые хедеры лезут...
     
    #1 cheater_man, 5 May 2012
    Last edited: 5 May 2012
  2. ky_kask

    ky_kask Member

    Joined:
    18 Nov 2009
    Messages:
    74
    Likes Received:
    81
    Reputations:
    6
    после запроса (GET или POST) на синапсе, очисти содержимое компонента.

    httpsend:=THTTPSend.Create;
    httpsend.HTTPMethod('GET','http://site.com');

    httpsend.Clear; // вот это делай всегда после любого запроса

    httpsend.HTTPMethod('POST','http://site.com');
     
  3. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Да действительно помогло! Еще тогда вопрос.
    Делаю значит я "пост" смотрю снифером и вижу, что мой запрос не отличается от браузерного, но то что я хочу не "постится". Оказывается синапс не захватывает еще пару кук. в чем дело?
     
    #3 cheater_man, 5 May 2012
    Last edited: 5 May 2012
  4. ky_kask

    ky_kask Member

    Joined:
    18 Nov 2009
    Messages:
    74
    Likes Received:
    81
    Reputations:
    6
    я для кук использую такой вариант:

    Code:
    uses strutils;
    
    function Setkuki(const x2: string):string;
    var CookieList:TstringList; cookie,x3:string; y,i:integer;
    begin
    x3:=x2;
    if pos('Set-Cookie:',x3)<>0 then
    begin
    
    CookieList:=TstringList.Create;
      while Pos('Set-Cookie', x3) <> 0 do
      begin
        y := Pos('Set-Cookie', x3);
        i := PosEx(': ', x3, y) + 2;
        CookieList.Add(Copy(x3, i, PosEx(';', x3, i) - i));
        Delete(x3, y, 10);
      end;
      cookie := 'Cookie: ';
      for i := 0 to CookieList.Count - 1 do
        cookie := cookie + CookieList.Strings[i] + '; ';
    CookieList.Free;
    end;
    Result:=cookie;
    end;
    
    
    ////////////////////////////////////////////////////////
    var cookie:string;
    
    httpsend.HTTPMethod('GET','http://site.com');
    cookie:=setkuki(httpsend.Headers.Text);
    ........
    
     HTTPsend.Cookies.Add(cookie);
     HTTPSend.HTTPMethod('POST','http://site.com');
    
    
    
     
  5. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Я с куками вообще не заморачиваюсь, вроде проблем не замечал. Но куки у синапса хранятся в стринг листе, так что не проблема недостающие вытащить из заголовка и добавить к кукам.
     
  6. Tip.the.besT

    Tip.the.besT Member

    Joined:
    24 Jun 2009
    Messages:
    267
    Likes Received:
    10
    Reputations:
    4
    Да и кстати, тебе куки приходится отлавливать потому, что ты очищаешь всё:
    Code:
    http.clear;
    Попробуй так:
    Code:
    http.headers.clear;
    http.documet.clear;
    Тогда всё нормально должно быть. Я уже и не помню когда куки сам обрабатывал)
     
  7. cheater_man

    cheater_man Member

    Joined:
    13 Nov 2009
    Messages:
    651
    Likes Received:
    44
    Reputations:
    7
    Вот и именно что синапс все куки не отлавливает...
    пс не инди, не синапс с отловом кук не справились на target сайте, справился только wininet
     
  8. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Он их и не должен отлавливать, он их в TstringList пишет, свойство: Cookies, обрабатывать надо самому.
    Сурово.
    Метод Clear кукисы не очищает, он чистит Headers и Document.
    Code:
    procedure THTTPSend.Clear;
    begin
      FRangeStart := 0;
      FRangeEnd := 0;
      FDocument.Clear;
      FHeaders.Clear;
      FMimeType := 'text/html';
    end;
    Кукисы не чистятьса.
    Поэтому можно спокойно использовать, Clear;