コードを動作させることができません:/
michal
質問する
20954 次
4 に答える
9
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());
于 2009-01-28T15:15:20.193 に答える
1
MSDN にはサンプルの良い例があります: Using HttpSendRequestEx for Large POST Requests
には、HTTP サーバーがデータを受信するための ASP ファイルも含まれています。msdn ページで自己解凍ファイル 'Hsrex.exe' をダウンロードしてください。
于 2012-07-13T07:25:57.283 に答える
1
c/c++ で wininet を使用する方法の簡単で完全なコードを見つけることができなかったので、ビットとピースから、将来訪問して理解できない人のために簡単でシンプルな c コードを書きました。コードは任意のファイルをアップロードできます(バイナリ、テキスト、mp3....) を指定したホスト名に変換し、バックエンドには php (以下のコード) を使用します。
#include<windows.h>
#include<stdio.h>
#include<wininet.h>
int main(int argc,char *argv[])
{
if(argc!=4)
{
printf("USAGE:fileuploader.exe hostname scriptname filename");
exit(1);
}
HANDLE hfile=CreateFile(argv[3],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
if(hfile==INVALID_HANDLE_VALUE)
{
printf("creatfile error %lu",GetLastError());
exit(1);
}
DWORD filesize=GetFileSize(hfile,NULL);
//STARTING PREPARING THE WININET CODE.
PCHAR szstart = "Content-Type: multipart/form-data; boundary=----qwerty";
PCHAR szData = "------qwerty\r\n"
"Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n"
"Content-Type: application/octet-stream\r\n"
"Content-Transfer-Encoding: binary\r\n\r\n";
PCHAR szDataEnd = "\r\n------qwerty--\r\n";
char szheaders[1024];
wsprintf(szheaders,szData,"filetoupload",argv[3]);
HINTERNET hsession,hconnect,hrequest;
DWORD bytesread,byteswritten,contentlen;
hsession=InternetOpen("fileuploader",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
if(!hsession)
{
printf("internet open error %lu",GetLastError());
exit(1);
}
hconnect=InternetConnect(hsession,argv[1],INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
hrequest=HttpOpenRequest(hconnect,"POST",argv[2],NULL,NULL,0,0,0);
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));
HttpSendRequest(hrequest,szstart,lstrlen(szstart),pbuf,contentlen);
char testbuf[1024];
InternetReadFile(hrequest,testbuf,(DWORD)sizeof(testbuf),&byteswritten);
printf("%s",testbuf);
}
そして、これが私が一緒に使用するphpコードです
<?php
if(isset($_FILES["filetoupload"]))
{
$path="C:/xampp/htdocs/";
$path=$path.basename($_FILES['filetoupload']['name']);
print($path);
if(move_uploaded_file($_FILES['filetoupload']['tmp_name'],$path))
{
print("upload success");
}
else
{
print("no success");
}
}
?>
<html>
<body>
<form action="fileupload.php" method="post" enctype="multipart/form-data">
Select File:
<input type="file" name="filetoupload"/>
<input type="submit" value="Upload Image" name="submit"/>
</form>
</body>
</html>
于 2020-04-27T11:25:49.070 に答える
1
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
例はhereから来ています。
于 2009-01-23T00:11:08.503 に答える