I cannot get my code to work :/
+1
A:
Here's a quick example from 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
The example comes from here.
Gordon Wilson
2009-01-23 00:11:08
Thanx, but I still don't understand how can I upload a file (image) with that, how do I add image binaries to the POST body I thin it should contain multipart body, but how :/
michael
2009-01-23 10:24:45
+2
A:
Eventually I found some working example on the 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());
michael
2009-01-28 15:15:20