Hi All!!!
Столкнулся с такой проблемой:
При отправке формы методом POST получаю ответ от сервера
"<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY>
<H1>Bad Request</H1>
Your browser sent a request that this server could not understand.<P>
Client sent malformed Host header<P>
<HR>"
Вот кусок кода:
CString frmdata = "Nick=HJDGKJGFKJFDKJFKJ";
TCHAR *acc = _T("Accept: */*");
HINTERNET hSession = InternetOpen("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(!hSession)
return;
HINTERNET hConnect = InternetConnect(hSession, _T("http://127.0.0.1/test/index.html"),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if(!hConnect)
return;
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", _T("tst.pl"), NULL, NULL, &acc, 0, 1);
if(!hRequest)
return;
BOOL res = HttpSendRequest(hRequest, hdrs, strlen(hdrs), &frmdata, frmdata.GetLength());
char Buffer[500];
DWORD sz = 500;
DWORD bytesRead ;
BOOL readFile = InternetReadFile(hRequest, Buffer, sz, &bytesRead);
Где накасячил?
Здравствуйте, F1, Вы писали:
F1>F1>CString frmdata = "Nick=HJDGKJGFKJFDKJFKJ";
F1>TCHAR *acc = _T("Accept: */*");
F1>HINTERNET hSession = InternetOpen("Microsoft Internet Explorer", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
F1> if(!hSession)
F1> return;
F1>HINTERNET hConnect = InternetConnect(hSession, _T("http://127.0.0.1/test/index.html"),
F1>INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
F1> if(!hConnect)
F1> return;
F1>HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", _T("tst.pl"), NULL, NULL, &acc, 0, 1);
F1> if(!hRequest)
F1> return;
F1> BOOL res = HttpSendRequest(hRequest, hdrs, strlen(hdrs), &frmdata, frmdata.GetLength());
F1> char Buffer[500];
F1> DWORD sz = 500;
F1> DWORD bytesRead ;
F1> BOOL readFile = InternetReadFile(hRequest, Buffer, sz, &bytesRead);
F1>
Где накасячил?
А много где
1.
HINTERNET hConnect = InternetConnect(hSession, _T("http://127.0.0.1/test/index.html"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
Адрес сервера должен быть просто 127.0.0.1, без http и путей.
2.
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", _T("tst.pl"), NULL, NULL, &acc, 0, 1);
Путь к скрипту правильный? /cgi-bin/ не забыт?
3.
HttpSendRequest(hRequest, hdrs, strlen(hdrs), &frmdata, frmdata.GetLength());
а) Что это за hdrs и strlen(hdrs)? В коде их нет, чему они равны?
б) &frmdata возвращает адрес объекта CString, а вовсе даже не указатель на строку с ником. Воспользуйся CString::GetBuffer.
Удачи.
Здравствуйте, Vamp, Вы писали:
V>а) Что это за hdrs и strlen(hdrs)? В коде их нет, чему они равны?
Ссори
static TCHAR hdrs[] =
_T("Content-Type: application/x-www-form-urlencoded\r\n");
CString frmdata = "Nick=123456";
V>б) &frmdata возвращает адрес объекта CString, а вовсе даже не указатель на строку с ником. Воспользуйся CString::GetBuffer.
Исправил.
V>Удачи.
Спасибо

Заработало.
Здравствуйте, F1, Вы писали:
F1>Спасибо
F1>Заработало.
Эээ... тут оценки есть...
Снова вопрос.
Имеется форма с action примерно такого вида: cgi.exe?function=func1
Когда, я это подставляю в HttpOpenRequest(hConnect, "POST", _T("/cgi-bin/cgi.exe"), NULL, NULL, &acc, 0, 1);
Получаю ответ от сервера, что cgi.exe не найден по такому пути. Прописывал путь полностью — такой-же результат.
Хотя в урле именно к ниму обращается (веб форма)
Как это побороть.
P.S. Делаю программу для отправки СМС минуя веб формы. Кстати веб форма генирится из того же скрипта на который ее данные потом отправляются.
Здравствуйте, F1, Вы писали:
F1>Вопрос снимается.
А вот и не снимается!
Я тут с аналогичной задачей вожусь. Прогу отправки СМС-ок пишу.
Возникли вопросы, хотел опытом обменяться, а у тебя даже мыла нет!