c++ - protocolo - php cabeceras http
¿Hay algún buen ejemplo de carga http utilizando WinInet c++ library (3)
No puedo hacer que mi código funcione: /
Aquí hay un ejemplo rápido de Microsoft.
static TCHAR hdrs[] =
_T("Content-Type: application/x-www-form-urlencoded");
static TCHAR frmdata[] =
_T("name=John+Doe&userid=hithere&other=P%26Q");
static LPSTR accept[2]={"*/*", NULL};
// for clarity, error-checking has been removed
HINTERNET hSession = InternetOpen("MyAgent",
INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
_T("FormActionHere"), NULL, NULL, accept, 0, 1);
HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
// close any valid internet-handles
El ejemplo viene de aquí .
Eventualmente encontré algunos ejemplos de trabajo en la web
static char szRawData[5000];
memset(szRawData, 0x11, sizeof(szRawData));
//
// CIHandle is just a wrapper class for HINTERNET, that closes handle in destructor
//
CIHandle hIntrn = InternetOpen( "LiveUpdate"),
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,
NULL,
NULL,
0);
if (!hIntrn)
return printf("No Internet connection: %li./n", GetLastError());
CIHandle hConn = InternetConnect( hIntrn,
"65.254.250.104",
INTERNET_DEFAULT_HTTP_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,
NULL);
if (!hConn)
return printf("Connection to update server failed: %li./n", GetLastError());
DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS |
INTERNET_FLAG_KEEP_CONNECTION |
INTERNET_FLAG_NO_AUTO_REDIRECT |
INTERNET_FLAG_NO_COOKIES |
INTERNET_FLAG_NO_CACHE_WRITE |
INTERNET_FLAG_NO_UI |
INTERNET_FLAG_RELOAD;
CIHandle hReq = HttpOpenRequest(hConn,
"POST",
"upload.php",
"HTTP/1.0",
NULL,
NULL,
dwOpenRequestFlags,
NULL);
ZString strBoundary = "---------------------------autoupdater";
ZString strContentHeader = "Host: www.mydomain_at_powweb.com/r/n"
"Content-Type: multipart/form-data; boundary=";
strContentHeader+=strBoundary;
HttpAddRequestHeaders(hReq, strContentHeader, strContentHeader.length(), HTTP_ADDREQ_FLAG_ADD);
ZString strHeaders;
strHeaders.precache(16384);
sprintf(strHeaders,
"--%s/r/n"
"Content-Disposition: form-data; name=/"userfile/"; "
"filename=/"test.raw/"/r/n"
"Content-Type: application/octet-stream/r/n/r/n",
(LPCTSTR)strBoundary);
tCharSeq s;//this is a just a dynamic array of bytes;
//
// append headers and file to request:
//
s.precache(16384);
s.append(strHeaders.length(), strHeaders);
//append with file data:
s.append(2000, szRawData); //<------------------- depending on this size, SendRequest fails.
//trailing end of data:
s.append(4,"/r/n--");
s.append(strBoundary.length(), (LPTSTR)strBoundary);
s.append(4,"--/r/n");
InternetSetOption(hReq, INTERNET_OPTION_USERNAME, "username/0", 9);
InternetSetOption(hReq, INTERNET_OPTION_PASSWORD, "password/0", 9);
if (!HttpSendRequest(hReq, NULL, 0, (void*)s.getBuffer(), s.length()))
return printf("HttpSendRequest failed: %li./n", GetLastError());
MSDN tiene un buen ejemplo SAMPLE: Usar HttpSendRequestEx para grandes solicitudes de POST
también contiene un archivo ASP para que el servidor HTTP reciba datos, descargue el archivo autoextraíble ''Hsrex.exe'' en la página msdn.