#include <windows.h>
#include <wininet.h>
#include <fstream>
#include <sstream>
#include <iostream>
#pragma comment(lib,"wininet.lib")
int main(int argc, char* argv[])
{
// инициализируем WinInet
HINTERNET hInternet = ::InternetOpen(TEXT("WinInet Test"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hInternet != NULL) {
// открываем HTTP сессию
HINTERNET hConnect = ::InternetConnect(hInternet, TEXT("localhost"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
INTERNET_SERVICE_HTTP, 0, 1u);
if (hConnect != NULL) {
// открываем запрос
HINTERNET hRequest = ::HttpOpenRequest(hConnect, TEXT("POST"), TEXT("test.php"), NULL, NULL, 0, INTERNET_FLAG_KEEP_CONNECTION, 1);
if (hRequest != NULL) {
// посылаем запрос
std::string fileName = "c:\\test.png"; // путь к файлу
char hdrs[] = "Content-Type: multipart/form-data; boundary=---------------------------7d82751e2bc0858";
std::string frmdata = "-----------------------------7d82751e2bc0858\r\n";
// В этой строке "uploadedfile" - название поля формы
frmdata += "Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + fileName + "\"\r\nContent-Type: application/octet-stream\r\n\r\n";
std::ostringstream ostrm;
std::ifstream fin(fileName, std::ios::binary);
if (fin) {
ostrm << fin.rdbuf();
frmdata.append(ostrm.str());
frmdata += "\r\n-----------------------------7d82751e2bc0858--\r\n";
BOOL bSend = ::HttpSendRequestA(hRequest, hdrs, strlen(hdrs), &frmdata[0], frmdata.size());
if (bSend) {
std::string res; // В этой переменной будет ответ сервера
for (;;) {
// читаем данные
char szData[1024];
DWORD dwBytesRead;
BOOL bRead = ::InternetReadFile(hRequest, szData, sizeof(szData) - 1, &dwBytesRead);
// выход из цикла при ошибке или завершении
if (bRead == FALSE || dwBytesRead == 0)
break;
// сохраняем результат
szData[dwBytesRead] = 0;
res.append(szData);
}
std::cout << res;
}
}
// закрываем запрос
::InternetCloseHandle(hRequest);
}
// закрываем сессию
::InternetCloseHandle(hConnect);
}
// закрываем WinInet
::InternetCloseHandle(hInternet);
}
return 0;
}