void UploadFile(std::wstring strServer,WORD wPort,std::wstring strObject,std::wstring strFilePath,std::wstring strNewFilePath)
{
HINTERNET hSession = 0;
HINTERNET hConnect = 0;
HINTERNET hRequest = 0;
DWORD dwNumberOfBytesWritten = 0;
DWORD dwBytesSend = 0;
INTERNET_BUFFERS BufferIn;
DWORD dwFlag;
LPCTSTR boundary = _T("-----------------------------67491722032265"); //随机字符串 最好随机生成,够长的随机字符串
LPCSTR aboundary = "-----------------------------67491722032265"; //ansi
HANDLE hFile;
hFile = CreateFile(strFilePath.c_str(),
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
DWORD dwFileSize = GetFileSize(hFile, 0);
TCHAR content_type[128];
_stprintf_s(content_type, TEXT("Content-Type: multipart/form-data; boundary=%s"), boundary);
LPTSTR referer = TEXT("Referer: http://211.149.160.175/cl/CLUpdateFile.ashx?appKey=md5|AAA|12345678|date"); //2016年7月15日17:58:47,Referer是?
LPTSTR accept = TEXT("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
LPTSTR accept_lan = TEXT("Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
LPTSTR accept_encoding = TEXT("Accept-Encoding: gzip, deflate");
LPTSTR user_agent = TEXT("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0");
hSession = InternetOpenW(_T("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0"), //用户代理的http协议
INTERNET_OPEN_TYPE_PRECONFIG,
0,
INTERNET_INVALID_PORT_NUMBER,
0);
if (0 == hSession)
{
return;
}
hConnect = InternetConnectW(hSession,
strServer.c_str(),
wPort,
_T(""),
_T(""),
INTERNET_SERVICE_HTTP,
0,
0);
if (0 == hConnect)
{
InternetCloseHandle(hSession);
return;
}
dwFlag = INTERNET_FLAG_KEEP_CONNECTION;
hRequest = HttpOpenRequestW(hConnect,
_T("POST"),
strObject.c_str(),
HTTP_VERSIONW,
0, //Referrer
0, //AcceptTypes
dwFlag,
0);
if (0 == hRequest)
{
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
return;
}
HttpAddRequestHeaders(hRequest, content_type, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
HttpAddRequestHeaders(hRequest, referer, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
HttpAddRequestHeaders(hRequest, accept, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
HttpAddRequestHeaders(hRequest, accept_lan, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
HttpAddRequestHeaders(hRequest, accept_encoding, -1, HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
BYTE* lpBuffer = (BYTE*)VirtualAlloc(0, dwFileSize, MEM_COMMIT, PAGE_READWRITE);
if (0 == lpBuffer)
{
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
return;
}
DWORD dwRead;
ReadFile(hFile, lpBuffer, dwFileSize, &dwRead, 0);
CloseHandle(hFile);
char first_boundary[128];
char delimiter[128];
char end_boundary[128];
sprintf_s(first_boundary, "--%s\r\n", aboundary);
sprintf_s(delimiter, "\r\n--%s\r\n", aboundary);
sprintf_s(end_boundary, "\r\n--%s--\r\n", aboundary);
char content_dispos[128] = {0};
std::string sNewPath;
USES_CONVERSION;
sNewPath = W2A(strNewFilePath.c_str());
sprintf_s(content_dispos, "Content-Disposition: form-data; name=\"fileupload\"; filename=\"%s\"\r\n", sNewPath.c_str()); //2016年7月15日18:17:14,name是?
LPSTR content_type2 = "Content-Type: application/octet-stream\r\n\r\n";
LPSTR rn = "\r\n";
BufferIn.dwStructSize = sizeof(INTERNET_BUFFERS);
BufferIn.Next = NULL;
BufferIn.lpcszHeader = NULL;
BufferIn.dwHeadersLength = 0;
BufferIn.dwHeadersTotal = 0;
BufferIn.lpvBuffer = NULL;
BufferIn.dwBufferLength = 0;
BufferIn.dwBufferTotal = dwFileSize
+ strlen(first_boundary)
+ strlen(content_dispos)
+ strlen(content_type2)
+ strlen(end_boundary); //Content-Length:
BufferIn.dwOffsetLow = 0;
BufferIn.dwOffsetHigh = 0;
if (!HttpSendRequestEx(hRequest, &BufferIn, 0, 0, 0))
{
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
return;
}
InternetWriteFile(hRequest, (byte*)first_boundary, strlen(first_boundary), &dwNumberOfBytesWritten); //first boundary
InternetWriteFile(hRequest, (byte*)content_dispos, strlen(content_dispos), &dwNumberOfBytesWritten);
InternetWriteFile(hRequest, (byte*)content_type2, strlen(content_type2), &dwNumberOfBytesWritten);
InternetWriteFile(hRequest, lpBuffer, dwFileSize, &dwNumberOfBytesWritten);
//如果还有其他文件
//InternetWriteFile(hRequest,(byte*)delimiter,strlen(delimiter),&dwNumberOfBytesWritten); //deimiter
//InternetWriteFile(hRequest,(byte*)content_dispos,strlen(content_dispos),&dwNumberOfBytesWritten);
//InternetWriteFile(hRequest,(byte*)content_type2,strlen(content_type2),&dwNumberOfBytesWritten);
//...
InternetWriteFile(hRequest, (byte*)end_boundary, strlen(end_boundary), &dwNumberOfBytesWritten);//last boundary
HttpEndRequest(hRequest, 0, 0, 0);
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
//DWORD dwStatusCode;
//DWORD dwSize = sizeof(DWORD);
//BOOL bRet = HttpQueryInfo(hFile, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
// &dwStatusCode, &dwSize, NULL);
VirtualFree(lpBuffer, 0, MEM_RELEASE);
}
请问这段代码里,那个地方来获取状态码?
怎么获取?