Отправка данных формы с помощью WinInet (C++)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Отправка данных формы с помощью WinInet (C++)

Сообщение Anonymous »

Я профессиональный юрист и программист-любитель (в основном C++). Ежедневно мне приходится заходить на один и тот же веб-сайт и искать массу судебных дел (обычный текст). Недавно мне пришла в голову идея написать простую функцию C++ для автоматической отправки данных формы на сайт, что сэкономило бы мне много рабочего времени. Я изучал WinInet в течение последних нескольких дней, и после многих часов мне удалось отправить простой запрос GET и получить исходный код главной страницы, но я не могу пойти дальше этого. Моя цель — отправить POST-запрос (думаю) с параметрами поиска на сайт и получить в ответ исходный код реальной страницы результатов поиска.
Что мне удалось запрограммировать пока почти бесполезно, но, по крайней мере, дает представление о моем нынешнем состоянии.
#include
#include
#include

#pragma comment (lib, "Wininet.lib")

bool GetRequest() {

HINTERNET hSession = InternetOpen(L"Mozilla/5.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (!hSession) return false;

HINTERNET hConnect = InternetConnect(hSession, L"scon.stj.jus.br", INTERNET_INVALID_PORT_NUMBER, L"", L"", INTERNET_SERVICE_HTTP, 0, 0);
if (!hConnect) return false;

HINTERNET hRequest = HttpOpenRequest(hConnect, L"GET", L"/", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
if (!hRequest) return false;

if (!HttpSendRequest(hRequest, 0, 0, 0, 0)) return false;

//from here on, I am able to read the main page source code using InternetReadFile, but I can't submit any form data

InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);

return true;

}

РЕДАКТИРОВАТЬ:
У меня все еще возникают проблемы при попытке воспроизвести поисковый запрос. Всякий раз, когда я запускаю следующий код, я продолжаю получать в качестве ответа одну и ту же веб-страницу. Я думаю, что значения, которые я передаю с запросом GET, неверны. Я только что скопировал URL-ссылку, сгенерированную браузером при выполнении общего поиска, но веб-форма, похоже, имеет другой список ввода (я не знаю, возможно ли это). В любом случае, вот мой текущий код:
#include
#include
#include

#pragma comment (lib, "Wininet.lib")

#define BUFFERSIZE 2048

bool GetRequest() {

std::wstring inputValues = L"/SCON/pesquisar.jsp?preConsultaPP=&pesquisaAmigavel=+fraude&acao=pesquisar&novaConsulta=true&i=1&b=ACOR&livre=fraude&filtroPorOrgao=&filtroPorMinistro=&filtroPorNota=&data=&operador=e&thesaurus=JURIDICO&p=true&tp=T&processo=&classe=&uf=&relator=&dtpb=&dtpb1=&dtpb2=&dtde=&dtde1=&dtde2=&orgao=&ementa=&nota=&ref=";

HINTERNET hSession = InternetOpen(L"Mozilla/5.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (!hSession) return false;

HINTERNET hConnect = InternetConnect(hSession, L"processo.stj.jus.br", INTERNET_INVALID_PORT_NUMBER, L"", L"", INTERNET_SERVICE_HTTP, 0, 0);
if (!hConnect) return false;

HINTERNET hGetRequest = HttpOpenRequest(hConnect, L"GET", inputValues.c_str(), NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
if (!hGetRequest) return false;
if (!HttpSendRequest(hGetRequest, NULL, 0, 0, 0)) return false;

char buffer[BUFFERSIZE + 1] = "";
DWORD dwBytesRead;
BOOL bRead;

FILE* file=NULL;
fopen_s(&file, "output.txt", "w");
if (!file) return false;

while (true) {

bRead = InternetReadFile(hGetRequest, buffer, BUFFERSIZE, &dwBytesRead);
if (dwBytesRead == 0) break;
if (bRead) buffer[dwBytesRead] = 0;
fwrite(buffer, sizeof(char), strlen(buffer), file);
}

InternetCloseHandle(hGetRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);

return true;
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... -wininet-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»