Работаю по одноклассникам, пишу соответственно софт для них. Для обработки http запросов использую стороннюю библиотеку Synapse. Все функции софта написаны, а вот с загрузкой изображений(фотографий) столкнулся с проблемой. Поснифил запрос браузера при заливке фоток, составил multipart/form-data запрос, идентичный ему. Как не бился, всегда получаю 302, в котором редирект на http://m.odnoklassniki.ru/dk?bk=UserAddPhoto&st.cmd=userAddPhoto&tkn=5200&errorId=8&details=null. Получив эту страницу, узнал что "еррорайди8" это "Файл не выбран". На данный момент сниффлю запрос софта, и сравниваю с запросом браузера. Что получаю от софта(Начало) Далее файл, и в конце Что отправляет браузер: Далее файл, и в конце Собственно сам код: Code: procedure SendPhoto; Const CRLF = #$0d+ #$0a; var s: AnsiString; FS: TFileStream; bou:string; begin randomize; http.Clear; HTTP.HTTPMethod('GET', 'http://m.odnoklassniki.ru/dk?st.cmd=userAddPhoto'); HTTP.Document.SaveToFile('userupload.html'); TS.LoadFromStream(http.Document); Page:= TS.Text; link:= Pars('<div class="pdiv"></div></div><form action="',Page,'"'); if pos('amp;',link) <> 0 then delete(link,pos('amp;',link),4); if pos('amp;',link) <> 0 then delete(link,pos('amp;',link),4); if pos('amp;',link) <> 0 then delete(link,pos('amp;',link),4); Form1.ConsoleLog.Lines.Add(link); http.Clear; try FS:=TFileStream.Create('C:\z_c9fdba02.jpg', fmOpenRead); bou:= '-----------------------------' + IntToStr(Random(999999999999)); http.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'); http.Headers.Add('Accept-Encoding: gzip, deflate'); http.Headers.Add('Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'); http.Headers.Add('Referer: http://m.odnoklassniki.ru/dk?st.cmd=userAddPhoto'); HTTP.MimeType := 'multipart/form-data; boundary='+bou; s := bou + CRLF + 'Content-Disposition: form-data; name="fr.posted"' + CRLF + CRLF + 'set' + CRLF + bou + CRLF + 'Content-Disposition: form-data; name="fr.file"; filename="z_c9fdba02.jpg"' + CRLF + 'Content-Type: image/jpeg' + CRLF + CRLF; HTTP.Document.Write(PAnsiChar(s)^, Length(s)); FS.Position := 0; HTTP.Document.CopyFrom(FS, FS.Size); s := CRLF + bou + CRLF + 'Content-Disposition: form-data; name="button_load"' + CRLF + CRLF+ utf8encode('Загрузить') + CRLF + bou + '--' + CRLF; HTTP.Document.Write(PAnsiChar(s)^, Length(s)); if HTTP.HTTPMethod('POST', link) then begin ShowMessage(HTTP.ResultString); end; finally FS.Free; end; end; За любые догадки, подсказки, советы буду очень благодарен Заранее спасибо.
Решил проблему сам. Кому интересно: в пост запросе такого типа граница должна иметь '--' в начале при любом использовании в теле.