Вобщем решил попробовать synapse. И сразу столкнулся с проблемой Сначала делаю гет все проходит норм. потом делаю пост и в снифере вижу это Что за лажа? До этого кодил под инди, вининет с таким не встречался. Какие-то левые хедеры лезут...
после запроса (GET или POST) на синапсе, очисти содержимое компонента. httpsend:=THTTPSend.Create; httpsend.HTTPMethod('GET','http://site.com'); httpsend.Clear; // вот это делай всегда после любого запроса httpsend.HTTPMethod('POST','http://site.com');
Да действительно помогло! Еще тогда вопрос. Делаю значит я "пост" смотрю снифером и вижу, что мой запрос не отличается от браузерного, но то что я хочу не "постится". Оказывается синапс не захватывает еще пару кук. в чем дело?
я для кук использую такой вариант: 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');
Я с куками вообще не заморачиваюсь, вроде проблем не замечал. Но куки у синапса хранятся в стринг листе, так что не проблема недостающие вытащить из заголовка и добавить к кукам.
Да и кстати, тебе куки приходится отлавливать потому, что ты очищаешь всё: Code: http.clear; Попробуй так: Code: http.headers.clear; http.documet.clear; Тогда всё нормально должно быть. Я уже и не помню когда куки сам обрабатывал)
Вот и именно что синапс все куки не отлавливает... пс не инди, не синапс с отловом кук не справились на target сайте, справился только wininet
Он их и не должен отлавливать, он их в TstringList пишет, свойство: Cookies, обрабатывать надо самому. Сурово. Метод Clear кукисы не очищает, он чистит Headers и Document. Code: procedure THTTPSend.Clear; begin FRangeStart := 0; FRangeEnd := 0; FDocument.Clear; FHeaders.Clear; FMimeType := 'text/html'; end; Кукисы не чистятьса. Поэтому можно спокойно использовать, Clear;