Приведенный ниже код загрузит файл: 1.jpg
на указанный хост с помощью метода wininet
и простого HTTP-запроса POST.
(name=johndoe and document=1.jpg)
#include<windows.h>
#include<wininet.h>
#include<iostream>
using namespace std;
DWORD rSize,filesize,bytesread,contentlen;
char tmp[2048]; //2Kb Response buffer
char szheaders[1024]; //1kb Header buffer
string chunks; //Server Response
HANDLE hfile;
HINTERNET hOpen2,hConnect2,hReq2;
char szstart[] = "Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468\r\nUser-Agent: Mozilla";
char szData[] = "---------------------------acebdf13572468\r\nContent-Disposition: form-data; name=\"firstname\"\r\n\r\njohndoe\r\n---------------------------acebdf13572468\r\nContent-Disposition: form-data; name=\"document\"; filename=\"1.jpg\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n";
char szDataEnd[] = "\r\n---------------------------acebdf13572468--\r\n";
int main()
{
hfile=CreateFile("1.jpg",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
if(hfile != INVALID_HANDLE_VALUE){
wsprintf(szheaders,szData,"filetoupload","1.jpg");
hOpen2=InternetOpen(TEXT("Mozilla/5.0"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if(hOpen2){
hConnect2=InternetConnect(hOpen2, TEXT("www.example.com"), INTERNET_DEFAULT_HTTPS_PORT, TEXT(""), TEXT(""), INTERNET_SERVICE_HTTP, 0, 0);
if(hConnect2){
hReq2=HttpOpenRequest(hConnect2, TEXT("POST"), TEXT("/your_path/index.php"), TEXT("HTTP/1.1"),NULL,NULL, INTERNET_FLAG_SECURE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_IGNORE_CERT_CN_INVALID |INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0);
if(hReq2){
filesize=GetFileSize(hfile,NULL);
contentlen=lstrlen(szheaders)+filesize+lstrlen(szDataEnd);
LPBYTE pbuf=(LPBYTE)malloc(contentlen);
CopyMemory(&pbuf[0],szheaders,lstrlen(szheaders));
ReadFile(hfile,&pbuf[lstrlen(szheaders)],filesize,&bytesread,NULL);
CopyMemory(&pbuf[lstrlen(szheaders)+filesize],szDataEnd,lstrlen(szDataEnd));
BOOL status = HttpSendRequest(hReq2,szstart,lstrlen(szstart),pbuf,contentlen);
if (status){
chunks="";
while(InternetReadFile(hReq2, tmp, 2048, &rSize) && rSize > 0)
{
tmp[rSize] = '\0';
chunks += tmp;
}
cout << chunks;
//Prints Server response
}
CloseHandle(hfile);
free(pbuf);
}
InternetCloseHandle(hReq2);
}
InternetCloseHandle(hConnect2);
}
InternetCloseHandle(hOpen2);
}
}
g++ test.cpp -o test.exe -lwininet
person
A5H1Q
schedule
11.03.2021
Content-Type
установлен наimage/jpeg
, что является двоичным форматом ... что не работает или вы? Кроме того,multipart/form-data
может излишне усложнять ситуацию. В какую службу вы загружаете? - person Potatoswatter   schedule 06.07.2012