Как реализовать передачу данных методом POST c помощью NMHTTP?
<form action=1.php method=post>
<input type=text name=login>
<input type=password name=pass>
</form>
</html>
Как мне выполнить вход с помощью компонента NMHTTP?
Вычитал в хелпе функцию Post(AnsiString URL, AnsiString S); которая якобы передает строку S на страницу URL методом POST. Тем не менее не получилось у меня это.
Для теста написал php-страничку:
<? print_r($_POST); ?> </PRE>
При посылке запроса GET, все передаваемые параметры выводится, но если сделать запрос POST, то ничего не выводит во втором массиве
а как ты параметры передавал? ) ну, что в S помещал?
нужно, я так понимаю, примерно следующее
2 дня как никак прошло.
какая уже разница что помещал, главное что оно не работает, расскажи мне как правильно надо
Прежде всего, тебе тут никто ничем не обязан, так что наберись терпения. Далее, если посмотреть структуру пакета запроса, то можно заметить, что вид данных post имеет вид rawurlencode. Почему - не знаю. По-видимому, из-за этого парсинг в $_POST невозможен. Как все-таки добыть эти данные:
1. если PHP установлен как модуль, то данные можно получить из $HTTP_RAW_POST_DATA или $GLOBALS['HTTP_RAW_POST_DATA']. В php.ini раскомментировать строчку: always_populate_raw_post_data = On или добавить в .htaccess: php_flag always_populate_raw_post_data On;
2. использовать stdin или input:
$postdata = fread($socket, 10000);
fclose($socket);
Далее преобразовать в ассоциативный массив одним из способов. Можно parse_str:
Объясняю еще раз:
Это ответ на твой вопрос. В исходнике TNMHTTP:
begin
URL_Holder := URL; {Set Locator to URL for later}
if FEncodePosts then
begin
NMURL1 := TNMURL.create(self);
try
if OutPutFileMode then
begin
end
else
begin
NMURL1.InputString := postData;
Postdata := NMURL1.Encode;
end;
finally
NMURL1.Free;
end;
end;
TheSendFile := PostData; {Set the file to send to filename}
ConnType := CmdPOST; {Set Connection type to Post}
HTTPConnect; {Connect to web and post}
end;
FEncodePosts - приватный, и конструкторе TNMHTTP ему присваивается true.
Если предложенные способы не нравятся, то используй Indy.
public:
bool FEncodePosts;
private:
...
При инициализации приложения присваивать FEncodePosts значение false, и тогда $_POST будет содержать данные в нужном виде.
Проверил, работают. Собрал package в 6-ом Builder'е. $_POST работает как надо.