Эммуляция отправки форм методом POST
От: F1  
Дата: 08.04.03 11:05
Оценка: 7 (1)
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);

Где накасячил?
Re: Эммуляция отправки форм методом POST
От: Vamp Россия  
Дата: 08.04.03 12:17
Оценка: 9 (2)

Здравствуйте, 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.

Удачи.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Эммуляция отправки форм методом POST
От: F1  
Дата: 08.04.03 12:34
Оценка:
Здравствуйте, 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>Удачи.
Спасибо
Заработало.
Re[3]: Эммуляция отправки форм методом POST
От: Vamp Россия  
Дата: 08.04.03 12:49
Оценка:
Здравствуйте, F1, Вы писали:

F1>Спасибо

F1>Заработало.

Эээ... тут оценки есть...
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Эммуляция отправки форм методом POST
От: F1  
Дата: 08.04.03 12:51
Оценка:
Снова вопрос.
Имеется форма с action примерно такого вида: cgi.exe?function=func1
Когда, я это подставляю в HttpOpenRequest(hConnect, "POST", _T("/cgi-bin/cgi.exe"), NULL, NULL, &acc, 0, 1);
Получаю ответ от сервера, что cgi.exe не найден по такому пути. Прописывал путь полностью — такой-же результат.
Хотя в урле именно к ниму обращается (веб форма)
Как это побороть.
P.S. Делаю программу для отправки СМС минуя веб формы. Кстати веб форма генирится из того же скрипта на который ее данные потом отправляются.
Re[3]: Эммуляция отправки форм методом POST
От: F1  
Дата: 08.04.03 13:37
Оценка:
Вопрос снимается.
Re[4]: Эммуляция отправки форм методом POST
От: PetrovichForever Россия  
Дата: 04.01.05 10:00
Оценка:
Здравствуйте, F1, Вы писали:

F1>Вопрос снимается.


А вот и не снимается!
Я тут с аналогичной задачей вожусь. Прогу отправки СМС-ок пишу.
Возникли вопросы, хотел опытом обменяться, а у тебя даже мыла нет!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.