AnsiString dd = "--";
AnsiString crlf = "\r\n";
AnsiString boundary;
AnsiString buffer;
TStringStream * str = new TStringStream(buffer);
str->WriteString("Content-type: multipart/form-data; boundary="+boundary+crlf);
boundary = "------" + randomString(20);
str->WriteString(dd + boundary + crlf);
str->WriteString("Content-Disposition: form-data; name=\"username\"" + crlf + crlf);
str->WriteString(conf->readEntry("username") + crlf);
str->WriteString(dd << boundary << crlf);
str->WriteString("Content-Disposition: form-data; name=\"password\"" << crlf << crlf);
str->WriteString(conf->readEntry("password") << crlf);
str->WriteString(dd + boundary + crlf);
str->WriteString("Content-Disposition: form-data; name=\"function\"" + crlf + crlf);
str->WriteString("cpgAPI.catList" + crlf);
str->WriteString(dd + boundary + crlf);
str->WriteString("Content-Disposition: form-data; name=\"cat\"" + crlf + crlf);
str->WriteString("0" + crlf);
str->WriteString(crlf + dd + boundary + dd + crlf + "\0");
POST запрос TIdHTTP
есть проблема (искал на форуме не подошло пока ничего, не первый день всё-таки ;)), заключается в следующем:
- пользую TIdHTTP для отправки POST запроса скрипту на PHP;
- пользую реализацию метода POST в которойц указываеся URL, Stream In (Source), Stream Out;
- заполняю Stream In следующим методом:
Код:
- потом посылаю это все дело POST запросом: IdHttp1->Post(url, str, response); (где response тоже StringStream, в который возвращается результат)....
в общем проблема - сниффером вижу, что уходит только строчка
[quote=Sniffer]
POST /api/index.php HTTP/1.1
[/quote]
больше ничего.... ну и соотвессна скрипт знает что его вызвали ПОСТом, но не видит параметров запроса, т.к. тело не передаётся......
вопрос: как победить? :)
Цитата: Тень Пса
всем доброго времени суток!
есть проблема (искал на форуме не подошло пока ничего, не первый день всё-таки ;)), заключается в следующем:
- пользую TIdHTTP для отправки POST запроса скрипту на PHP;
...
больше ничего.... ну и соотвессна скрипт знает что его вызвали ПОСТом, но не видит параметров запроса, т.к. тело не передаётся......
вопрос: как победить? :)
есть проблема (искал на форуме не подошло пока ничего, не первый день всё-таки ;)), заключается в следующем:
- пользую TIdHTTP для отправки POST запроса скрипту на PHP;
...
больше ничего.... ну и соотвессна скрипт знает что его вызвали ПОСТом, но не видит параметров запроса, т.к. тело не передаётся......
вопрос: как победить? :)
Посмотри чего IE (например) отправляет при таком запросе и сделай так же...
А вообще и используй WinInet.
а сделать так же, мне не позволяет сам компонент. я ж говорю, он принимает Source, я уже всё, что только мог туда пихал :) и полные хидеры, и всё на свете. но блин, не кушает он у меня body запроса и всё...
есть еще TNMHTTP или как-то так, с вкладки FastNet, дык вот он хоть хидер нормальный отправляет. а тело запроса, нихатит :( мож кто-нибудь воевал уже с таким делом и победил? хотелось бы компонентами обойтись... в принципе, но если никто не побеждал такую гадость, то попробую заюзать WinInet, авось получится :)))
Цитата: Тень Пса
дело в том, что это сдернуто с рабочей программы, тока она на Qt :)
а сделать так же, мне не позволяет сам компонент. я ж говорю, он принимает Source, я уже всё, что только мог туда пихал :) и полные хидеры, и всё на свете. но блин, не кушает он у меня body запроса и всё...
есть еще TNMHTTP или как-то так, с вкладки FastNet, дык вот он хоть хидер нормальный отправляет. а тело запроса, нихатит :( мож кто-нибудь воевал уже с таким делом и победил? хотелось бы компонентами обойтись... в принципе, но если никто не побеждал такую гадость, то попробую заюзать WinInet, авось получится :)))
а сделать так же, мне не позволяет сам компонент. я ж говорю, он принимает Source, я уже всё, что только мог туда пихал :) и полные хидеры, и всё на свете. но блин, не кушает он у меня body запроса и всё...
есть еще TNMHTTP или как-то так, с вкладки FastNet, дык вот он хоть хидер нормальный отправляет. а тело запроса, нихатит :( мож кто-нибудь воевал уже с таким делом и победил? хотелось бы компонентами обойтись... в принципе, но если никто не побеждал такую гадость, то попробую заюзать WinInet, авось получится :)))
сюда посмотри: http://forum.codenet.ru/showthread.php?t=17655&highlight=%E7%E0%EA%E0%F7%EA%E0
по моему из той же оперы...
даже WinInet отправляет всё в хидере, а sweb говорит, что мой запрос отклонён в виду его возможной небезопасности :'((((
посылаю Content-Type: multipart/form-data.... c application/x-www-form-urlencoded всё окей...
естессна устанаваливаю boundary в шеснадцатиричное число.
пробовал и каждую часть брать в boundary и всё вместе, ничего не помогает
и так пробовал:
Код:
--2f876dc
Content-Disposition: form-data; name="username";
watchdog
--2f876dc--
--2f876dc
Content-Disposition: form-data; name="password";
********
--2f876dc--
Content-Disposition: form-data; name="username";
watchdog
--2f876dc--
--2f876dc
Content-Disposition: form-data; name="password";
********
--2f876dc--
и так
Код:
--2f876dc
Content-Disposition: form-data; name="username";
watchdog
Content-Disposition: form-data; name="password";
********
--2f876dc--
Content-Disposition: form-data; name="username";
watchdog
Content-Disposition: form-data; name="password";
********
--2f876dc--
запрос уходит, а толку нет.
может я что-то не понимаю в отправке multipart/form-data?
подскажите пжалста :) кто уже этим "баловался"...
[COLOR=DimGray]помог материал по ссылке http://www.15seconds.com/issue/001003.htm[/COLOR]
Код:
POST /api/index.php HTTP/1.1
Content-Length: 640
Accept-Encoding: gzip,deflate
Accept: text/html,text/plain,text/xml,image/jpeg,image/gif,image/*;q=0.5
Content-Type: multipart/form-data; boundary=---------------------------7d51d919f0276
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5
Host: www.host.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="username";
watchdog
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="password";
********
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="function";
upload
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="aid";
3
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="file"; filename="c:\aeros.jpg"
Content-Type: image/jpeg
Transfer-Encoding: binary
-----------------------------7d51d919f0276--
Content-Length: 640
Accept-Encoding: gzip,deflate
Accept: text/html,text/plain,text/xml,image/jpeg,image/gif,image/*;q=0.5
Content-Type: multipart/form-data; boundary=---------------------------7d51d919f0276
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5
Host: www.host.com
Proxy-Connection: Keep-Alive
Pragma: no-cache
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="username";
watchdog
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="password";
********
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="function";
upload
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="aid";
3
-----------------------------7d51d919f0276
Content-Disposition: form-data; name="file"; filename="c:\aeros.jpg"
Content-Type: image/jpeg
Transfer-Encoding: binary
-----------------------------7d51d919f0276--
чего-то не получается :( не могу допетрить...
всё передаётся, но php-скрипт ругается, что картинка неправильная вся :( потому что приходят base64-кодированные данные... ну и соотвессна в файле оказываются они же.
как сказать апачу, чтобы он декодировал это всё дело?
PS: менять php-скрипт нельзя, это готовое API продукта, под который пишется приложение :rolleyes:
посылаю массив byte :)
главное: правильно указать Content-Length. :)
PS: прошу тему закрыть :)