本文整理汇总了C++中CHttpConnection::Close方法的典型用法代码示例。如果您正苦于以下问题:C++ CHttpConnection::Close方法的具体用法?C++ CHttpConnection::Close怎么用?C++ CHttpConnection::Close使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CHttpConnection
的用法示例。
在下文中一共展示了CHttpConnection::Close方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetHTTPS
UINT CCopiagenda::GetHTTPS(CString csURL, CString csHeaders, CString& csRetHeaders, CString& csRetData)
{
UINT nCode;
DWORD dwService;
CString csServer;
CString csPath;
INTERNET_PORT nPort;
CString csUser;
CString csPwd;
AfxParseURLEx(csURL,dwService,csServer,csPath,nPort,csUser,csPwd,0);
CHttpConnection* pConnection = NULL;
pConnection=m_pSession->GetHttpConnection(csServer,INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_SECURE,nPort, NULL, NULL);
if(pConnection)
{
BOOL bResult=FALSE;
CHttpFile* pFile = NULL;
pFile=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,csPath,NULL,1,NULL,"HTTP/1.1",INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_AUTO_REDIRECT|INTERNET_FLAG_SECURE);
if(pFile)
{
try
{
bResult=pFile->SendRequest(csHeaders, NULL, 0);
if(bResult)
{
CString csCode;
pFile->QueryInfo(HTTP_QUERY_STATUS_CODE,csCode);
nCode=atoi(csCode);
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF,csRetHeaders);
csRetData=ReadData(pFile);
}
}
catch(CInternetException* e)
{
}
pFile->Close();
delete pFile;
}
pConnection->Close();
delete pConnection;
}
return nCode;
}
示例2: PostHTTP
UINT CMMSSender::PostHTTP(CString csURL, BYTE* strPostData, long lDataSize, CString csHeaders, CString& csRetHeaders, CString& csRetData)
{
UINT nCode=0;
DWORD dwService;
CString csServer;
CString csPath;
INTERNET_PORT nPort;
CString csUser;
CString csPwd;
AfxParseURLEx(csURL,dwService,csServer,csPath,nPort,csUser,csPwd,0);
CHttpConnection* pConnection = NULL;
pConnection=m_pSession->GetHttpConnection(csServer,0, nPort, NULL, NULL);
if(pConnection)
{
BOOL bResult=FALSE;
CHttpFile* pFile = NULL;
pFile=pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,csPath,NULL,1,NULL,"HTTP/1.1",INTERNET_FLAG_NO_AUTO_REDIRECT);
if(pFile)
{
try
{
bResult=pFile->SendRequest(csHeaders, strPostData, lDataSize);
if(bResult)
{
CString csCode;
pFile->QueryInfo(HTTP_QUERY_STATUS_CODE,csCode);
nCode=atoi(csCode);
CString csHeaders;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF,csRetHeaders);
csRetData=ReadData(pFile);
}
}
catch(CInternetException* e)
{
}
pFile->Close();
delete pFile;
}
pConnection->Close();
delete pConnection;
}
return nCode;
}
示例3: sizeof
CString C51JobWebPost::GeHttptFile(const char *url)
{
CString szContent;
char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
//in this case "proxya" is the proxy server name, "8080" is its port
strcpy(strProxyList, "125.41.181.59:8080");
strcpy(strUsername, "myusername");
strcpy(strPassword, "mypassword");
DWORD dwServiceType = AFX_INET_SERVICE_HTTP;
CString szServer, szObject;
INTERNET_PORT nPort;
AfxParseURL(url, dwServiceType, szServer, szObject, nPort);
CInternetSession mysession;
CHttpConnection* pConnection;
CHttpFile* pHttpFile;
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = strProxyList;
proxyinfo.lpszProxyBypass = NULL;
mysession.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));
pConnection = mysession.GetHttpConnection("125.41.181.59",
INTERNET_FLAG_KEEP_CONNECTION,
8080,
NULL, NULL);
pHttpFile = pConnection->OpenRequest("GET",url,
NULL, 0, NULL, NULL,
INTERNET_FLAG_KEEP_CONNECTION);
//here for proxy
//pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
//pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1);
pHttpFile->SendRequest(NULL);
DWORD nFileSize = pHttpFile->GetLength();
LPSTR rbuf = szContent.GetBuffer(nFileSize);
UINT uBytesRead = pHttpFile->Read(rbuf, nFileSize);
szContent.ReleaseBuffer();
pHttpFile->Close();
delete pHttpFile;
pConnection->Close();
delete pConnection;
mysession.Close();
return szContent;
}
示例4: _tmain
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
CInternetSession ses;
CHttpConnection * con;
CHttpFile * file1=NULL;
INTERNET_PORT port=80;
const bufmax=10000;
char buf[bufmax];
int rec;
try
{
//соединение с Web-сервером
con=ses.GetHttpConnection("localhost/P-Lib",port);
//определяем запрос
file1=con->OpenRequest(1, "index.htm");
//послать запрос
file1->SendRequest();
do
{
//читаем порцию или всю
rec=file1->Read(buf,bufmax-1);
buf[rec]='\0';
printf("%s",buf);
}while(rec>0);
}
catch(CInternetException *pe)
{
printf("Error!\n");
return -1;
}
con->Close();
delete file1;
}
return nRetCode;
}
示例5: main
int main(int argc, char* argv[])
{
ShowBanner();
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
cerr << _T("MFC Failed to initialize.\n");
return 1;
}
if (argc < 2 || !ParseOptions(argc, argv) || pszURL == NULL)
ShowUsage();
int nRetCode = 0;
CTearSession session(_T("TEAR - MFC Sample App"), dwAccessType);
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
// check to see if this is a reasonable URL
CString strServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType;
if (!AfxParseURL(pszURL, dwServiceType, strServerName, strObject, nPort) ||
dwServiceType != INTERNET_SERVICE_HTTP)
{
cerr << _T("Error: can only use URLs beginning with http://") << endl;
ThrowTearException(1);
}
if (bProgressMode)
{
cerr << _T("Opening Internet...");
VERIFY(session.EnableStatusCallback(TRUE));
}
pServer = session.GetHttpConnection(strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,
strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);
pFile->AddRequestHeaders(szHeaders);
pFile->SendRequest();
DWORD dwRet;
pFile->QueryInfoStatusCode(dwRet);
// if access was denied, prompt the user for the password
if (dwRet == HTTP_STATUS_DENIED)
{
DWORD dwPrompt;
dwPrompt = pFile->ErrorDlg(NULL, ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL);
// if the user cancelled the dialog, bail out
if (dwPrompt != ERROR_INTERNET_FORCE_RETRY)
{
cerr << _T("Access denied: Invalid password\n");
ThrowTearException(1);
}
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
}
CString strNewLocation;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);
// were we redirected?
// these response status codes come from WININET.H
if (dwRet == HTTP_STATUS_MOVED ||
dwRet == HTTP_STATUS_REDIRECT ||
dwRet == HTTP_STATUS_REDIRECT_METHOD)
{
CString strNewLocation;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);
int nPlace = strNewLocation.Find(_T("Location: "));
if (nPlace == -1)
{
cerr << _T("Error: Site redirects with no new location") << endl;
ThrowTearException(2);
}
strNewLocation = strNewLocation.Mid(nPlace + 10);
nPlace = strNewLocation.Find('\n');
if (nPlace > 0)
strNewLocation = strNewLocation.Left(nPlace);
// close up the redirected site
pFile->Close();
delete pFile;
pServer->Close();
//.........这里部分代码省略.........
示例6: GetData
//.........这里部分代码省略.........
}
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
}
CString strNewLocation;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);
// were we redirected?
// these response status codes come from WININET.H
if (dwRet == HTTP_STATUS_MOVED ||
dwRet == HTTP_STATUS_REDIRECT ||
dwRet == HTTP_STATUS_REDIRECT_METHOD)
{
CString strNewLocation;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);
int nPlace = strNewLocation.Find(_T("Location: "));
if (nPlace == -1)
{
TRACE( _T("Error: Site redirects with no new location") );
return "request failed - Site redirects with no new location";
}
strNewLocation = strNewLocation.Mid(nPlace + 10);
nPlace = strNewLocation.Find('\n');
if (nPlace > 0)
strNewLocation = strNewLocation.Left(nPlace);
// close up the redirected site
pFile->Close();
delete pFile;
pServer->Close();
delete pServer;
if (bProgressMode)
{
TRACE( _T("Caution: redirected to "));
TRACE( (LPCTSTR) strNewLocation );
}
// figure out what the old place was
if (!AfxParseURL(strNewLocation, dwServiceType, strServerName, strObject, nPort))
{
TRACE( _T("Error: the redirected URL could not be parsed.") );
return "request failed - the redirected URL could not be parsed.";
}
if (dwServiceType != INTERNET_SERVICE_HTTP)
{
TRACE( _T("Error: the redirected URL does not reference a HTTP resource.") );
return "request failed - the redirected URL does not reference a HTTP resource";
}
// try again at the new location
pServer = session.GetHttpConnection(strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet != HTTP_STATUS_OK)
{
//TRACE( _T("Error: Got status code ") dwRet );
示例7: GetHTTPData
//.........这里部分代码省略.........
}
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
}
CString strNewLocation;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);
// were we redirected?
// these response status codes come from WININET.H
if (dwRet == HTTP_STATUS_MOVED ||
dwRet == HTTP_STATUS_REDIRECT ||
dwRet == HTTP_STATUS_REDIRECT_METHOD)
{
CString strNewLocation;
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);
int nPlace = strNewLocation.Find(_T("Location: "));
if (nPlace == -1)
{
TRACE( _T("Error: Site redirects with no new location"));
line = "request failed - Site redirects with no new location";
}
strNewLocation = strNewLocation.Mid(nPlace + 10);
nPlace = strNewLocation.Find('\n');
if (nPlace > 0)
strNewLocation = strNewLocation.Left(nPlace);
// close up the redirected site
pFile->Close();
delete pFile;
pServer->Close();
delete pServer;
if (bProgressMode)
{
TRACE( _T("Caution: redirected to "));
TRACE((LPCTSTR) strNewLocation);
}
// figure out what the old place was
if (!AfxParseURL(strNewLocation, dwServiceType, strServerName, strObject, nPort))
{
TRACE(_T("Error: the redirected URL could not be parsed."));
line = "request failed - the redirected URL could not be parsed.";
}
if (dwServiceType != INTERNET_SERVICE_HTTP)
{
TRACE(_T("Error: the redirected URL does not reference a HTTP resource."));
line = "request failed - the redirected URL does not reference a HTTP resource";
}
// try again at the new location
pServer = session.GetHttpConnection(strServerName, nPort);
if(!b_post) {
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
}
else {
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, file.c_str());
}
//pFile->AddRequestHeaders(szHeaders);
示例8: GetWMEVersionHttp
HRESULT CMainFrame::GetWMEVersionHttp(CString& WMEVersion)
{
HRESULT RetCode = S_OK;
WMEVersion = "0.0.0";
CString Magic = GetRegString(HKEY_CURRENT_USER, DCGF_TOOLS_REG_PATH, "BBID");
CInternetSession Session;
CHttpConnection* Server = NULL;
CHttpFile* File = NULL;
DWORD HttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT;
const TCHAR Headers[] = _T("Accept: text/*\r\nUser-Agent: WME ProjectMan\r\n");
CString Url = LOC("/str1086/http://www.dead-code.org/vercheck.php");
CString CurrVer;
CurrVer.Format("%d.%d.%03d", DCGF_VER_MAJOR, DCGF_VER_MINOR, DCGF_VER_BUILD);
Url += "?product=wme&ver=" + CurrVer;
Url += "&bbid=" + Magic;
if(DCGF_VER_BETA) Url += "&beta=1";
bool DotNet = RegKeyExists(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\.NETFramework\\policy\\v2.0");
Url += "&dotnet=" + CString(DotNet?"1":"0");
CString ServerName;
CString Object;
INTERNET_PORT Port;
DWORD ServiceType;
try{
if(!AfxParseURL(Url, ServiceType, ServerName, Object, Port) || ServiceType != INTERNET_SERVICE_HTTP){
return E_FAIL;
}
Server = Session.GetHttpConnection(ServerName, Port);
File = Server->OpenRequest(CHttpConnection::HTTP_VERB_GET, Object, NULL, 1, NULL, NULL, HttpRequestFlags);
File->AddRequestHeaders(Headers);
if(File->SendRequest()){
TCHAR sz[1024];
if(File->ReadString(sz, 1023)){
WMEVersion = Entry(1, CString(sz), '\n');
}
}
File->Close();
Server->Close();
}
catch (CInternetException* pEx)
{
// catch errors from WinINet
//TCHAR szErr[1024];
//pEx->GetErrorMessage(szErr, 1024);
//MessageBox(szErr, LOC("/str1002/Error"), MB_OK|MB_ICONERROR);
RetCode = E_FAIL;
pEx->Delete();
}
if (File != NULL) delete File;
if (Server != NULL) delete Server;
Session.Close();
return RetCode;
}
示例9: GetWebFile
//.........这里部分代码省略.........
pFile->AddRequestHeaders(szHeaders);
pFile->AddRequestHeaders("User-Agent: GetWebFile/1.0\r\n", HTTP_ADDREQ_FLAG_ADD_IF_NEW);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);//Check wininet.h for info
//about the status codes
if (dwRet == HTTP_STATUS_DENIED)
{
return dwRet;
}
if (dwRet == HTTP_STATUS_MOVED ||
dwRet == HTTP_STATUS_REDIRECT ||
dwRet == HTTP_STATUS_REDIRECT_METHOD)
{
CString strNewAddress;
//again check wininet.h for info on the query info codes
//there is alot one can do and re-act to based on these codes
pFile->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewAddress);
int nPos = strNewAddress.Find(_T("Location: "));
if (nPos == -1)
{
return 0;
}
strNewAddress = strNewAddress.Mid(nPos + 10);
nPos = strNewAddress.Find('\n');
if (nPos > 0)
strNewAddress = strNewAddress.Left(nPos);
pFile->Close();
delete pFile;
pServer->Close();
delete pServer;
CString strServerName;
CString strObject;
INTERNET_PORT nNewPort;
DWORD dwServiceType;
if (!AfxParseURL(strNewAddress, dwServiceType, strServerName, strObject, nNewPort))
{
return 0;
}
pServer = session.GetHttpConnection(strServerName, nNewPort,
pstrUserName, pstrPassword);
pFile = pServer->OpenRequest(pstrVerb, strObject,
pstrReferer, 1, &pstrAcceptTypes, pstrVersion, dwHttpRequestFlags);
pFile->AddRequestHeaders(szHeaders);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet != HTTP_STATUS_OK)
{
return dwRet;
}
}
if(dwRet == HTTP_STATUS_OK)
{
int len = pFile->GetLength();
char buf[2000];
示例10: Request
DWORD CHttpClient::Request(LPCTSTR lpszURL, CString &strPostData,
CFile *pFileSave, CString *pstrResult,
PROGRESS_CALLBACK fnCallback, void *cookie )
{
DWORD dwRet = HTTP_STATUS_BAD_REQUEST;
if( NULL == lpszURL || strlen(lpszURL) == 0 )
return dwRet;
int nContentLength = 0;
int nContentLengthLocal = 0;
int nContentLengthFinished = 0;
int nContentLengthTotal = 0;
// prepare header
CString strHeader;
CMapStringToString mapHeader;
if( pFileSave && pFileSave->GetPosition() > 0 )
{
nContentLengthFinished = (int)pFileSave->GetPosition();
CString strRange;
strRange.Format( "bytes=%u-", nContentLengthFinished );
mapHeader.SetAt( szRange, strRange );
}
if( pstrResult && pstrResult->GetLength() > 0 )
{
nContentLengthFinished = pstrResult->GetLength();
CString strRange;
strRange.Format( "bytes=%u-", nContentLengthFinished );
mapHeader.SetAt( szRange, strRange );
}
if( m_strCookie.GetLength() > 0 )
mapHeader.SetAt( szCookieKey, m_strCookie );
MakeHttpHeader( mapHeader, strHeader );
// default type and flags
DWORD dwHttpRequestFlags = INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD
| INTERNET_FLAG_DONT_CACHE
| INTERNET_FLAG_EXISTING_CONNECT; // | INTERNET_FLAG_KEEP_CONNECTION;
CString strProxy;
if( !m_strProxyAddress.IsEmpty() )
strProxy = FormatProxyString( m_nProxyType, m_strProxyAddress, m_nProxyPort );
CInternetSession session( szUserAgentValue, 1, m_nAccessType,
strProxy, NULL, INTERNET_FLAG_DONT_CACHE );
// 以下SetOption似乎不起作用
if( !strProxy.IsEmpty() && !m_strProxyAddress.IsEmpty() )
{
session.SetOption( INTERNET_OPTION_PROXY_USERNAME, (LPVOID)(LPCTSTR)m_strProxyUser, m_strProxyUser.GetLength() );
session.SetOption( INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)(LPCTSTR)m_strProxyPasswd, m_strProxyPasswd.GetLength() );
}
session.SetOption( INTERNET_OPTION_RECEIVE_TIMEOUT, 300000 );
session.SetOption( INTERNET_OPTION_SEND_TIMEOUT, 30000 );
session.SetOption( INTERNET_OPTION_CONNECT_TIMEOUT, 30000 );
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
// check to see if this is a reasonable URL
DoOpenURL( lpszURL, dwHttpRequestFlags, strHeader, strPostData, &session, &pServer, &pFile, fnCallback, cookie );
if( NULL == pServer || NULL == pFile )
ThrowTearException( ERR_TEAR_INTERRUPTED );
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_MOVED ||
dwRet == HTTP_STATUS_REDIRECT ||
dwRet == HTTP_STATUS_REDIRECT_METHOD)
{
CString strNewLocation = GetNewLocation( pFile );
// close up the redirected site
pFile->Close();
delete pFile;
pFile = NULL;
pServer->Close();
delete pServer;
pServer = NULL;
// progress callback
if( fnCallback )
fnCallback( PROG_REDIRECTING, 0, NULL, cookie );
// open new url
DoOpenURL( strNewLocation, dwHttpRequestFlags,
strHeader, strPostData,
&session, &pServer, &pFile, fnCallback, cookie );
pFile->QueryInfoStatusCode(dwRet);
}
if (dwRet == HTTP_STATUS_PARTIAL_CONTENT)
dwRet = HTTP_STATUS_OK;
if (dwRet != HTTP_STATUS_OK)
ThrowTearException( ERR_TEAR_INTERRUPTED );
CString strInfo;
pFile->QueryInfo( HTTP_QUERY_SET_COOKIE, strInfo );
//.........这里部分代码省略.........
示例11: DoOpenURL
void CHttpClient::DoOpenURL( LPCTSTR lpszURL, DWORD dwHttpRequestFlags,
CString &strHeader, CString &strPostData,
CInternetSession *pSession,
CHttpConnection **ppServer, CHttpFile **ppFile,
PROGRESS_CALLBACK fnCallback, void * cookie )
{
CString strServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType;
int nVerb = (strPostData.GetLength()>0 ? CHttpConnection::HTTP_VERB_POST : CHttpConnection::HTTP_VERB_GET);
if (!AfxParseURL(lpszURL, dwServiceType, strServerName, strObject, nPort) ||
dwServiceType != INTERNET_SERVICE_HTTP)
{
ThrowTearException( ERR_TEAR_URLFORMAT );
}
if( fnCallback )
fnCallback( PROG_HTTPCONNECTTING, 0, NULL, cookie );
CHttpConnection *pServer = pSession->GetHttpConnection(strServerName, dwHttpRequestFlags, nPort, m_strProxyUser, m_strProxyPasswd );
CHttpFile * pFile = pServer->OpenRequest(nVerb, strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);
pFile->AddRequestHeaders(strHeader, HTTP_ADDREQ_FLAG_COALESCE);
if( strPostData.GetLength() > 0 ) // post
{
try
{
pFile->SendRequestEx( DWORD(strPostData.GetLength()) );
pFile->WriteString(strPostData);
pFile->EndRequest();
}
catch( CInternetException *pp ) // HTTP_STATUS_BAD_METHOD
{
pp->Delete();
// close up the redirected site
pFile->Close();
delete pFile;
pFile = NULL;
pServer->Close();
delete pServer;
pServer = NULL;
pServer = pSession->GetHttpConnection(strServerName, dwHttpRequestFlags, nPort, m_strProxyUser, m_strProxyPasswd );
pFile = pServer->OpenRequest(nVerb, strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);
pFile->AddRequestHeaders(strHeader, HTTP_ADDREQ_FLAG_COALESCE);
pFile->SendRequestEx( DWORD(strPostData.GetLength()) );
pFile->WriteString(strPostData);
pFile->EndRequest();
}
}
else
{
pFile->SendRequest();
}
if( fnCallback )
fnCallback( PROG_REQUESTSENT, 0, NULL, cookie );
// Bad Post method
DWORD dwRet = 0;
pFile->QueryInfoStatusCode( dwRet );
// if access was denied, prompt the user for the password
if (dwRet == HTTP_STATUS_DENIED
|| dwRet == HTTP_STATUS_PROXY_AUTH_REQ )
{
DWORD dwPrompt;
dwPrompt = pFile->ErrorDlg(NULL, ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA
| FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL);
// if the user cancelled the dialog, bail out
if (dwPrompt != ERROR_INTERNET_FORCE_RETRY)
ThrowTearException( ERR_TEAR_CANCEL );
if( strPostData.GetLength() > 0 ) // post
{
try{
pFile->SendRequestEx( DWORD(strPostData.GetLength()) );
pFile->WriteString(strPostData);
pFile->EndRequest();
}
catch( CInternetException *pp ) // HTTP_STATUS_BAD_METHOD
{
pp->Delete();
pFile->SendRequestEx( DWORD(strPostData.GetLength()) );
pFile->WriteString(strPostData);
pFile->EndRequest();
}
}
else
{
pFile->SendRequest();
}
pFile->QueryInfoStatusCode(dwRet);
}
//.........这里部分代码省略.........
示例12: Download
BOOL CDlgView::Download(const CString& strFileURLInServer, //待下载文件的URL
const CString & strFileLocalFullPath)//存放到本地的路径
{
ASSERT(strFileURLInServer != "");
ASSERT(strFileLocalFullPath != "");
CInternetSession session(_T("test"));
CHttpConnection* pHttpConnection = NULL;
CHttpFile* pHttpFile = NULL;
CString strServer, strObject;
INTERNET_PORT wPort;
DWORD dwType;
const int nTimeOut = 2000;
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //重试之间的等待延时
session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); //重试次数
char* pszBuffer = NULL;
try
{
AfxParseURL(strFileURLInServer, dwType, strServer, strObject, wPort);
pHttpConnection = session.GetHttpConnection(strServer, wPort);
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject,NULL,1,NULL,NULL,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD);
if(pHttpFile->SendRequest() == FALSE)
return false;
DWORD dwStateCode;
pHttpFile->QueryInfoStatusCode(dwStateCode);
if(dwStateCode == HTTP_STATUS_OK)
{
HANDLE hFile = CreateFile(strFileLocalFullPath, GENERIC_WRITE,
FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
NULL); //创建本地文件
if(hFile == INVALID_HANDLE_VALUE)
{
pHttpFile->Close();
pHttpConnection->Close();
session.Close();
return false;
}
char szInfoBuffer[1000]; //返回消息
DWORD dwFileSize = 0; //文件长度
DWORD dwInfoBufferSize = sizeof(szInfoBuffer);
BOOL bResult = FALSE;
bResult = pHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH,
(void*)szInfoBuffer,&dwInfoBufferSize,NULL);
dwFileSize = atoi(szInfoBuffer);
const int BUFFER_LENGTH = 1024 * 10;
pszBuffer = new char[BUFFER_LENGTH]; //读取文件的缓冲
DWORD dwWrite, dwTotalWrite;
dwWrite = dwTotalWrite = 0;
UINT nRead = pHttpFile->Read(pszBuffer, BUFFER_LENGTH); //读取服务器上数据
while(nRead > 0)
{
WriteFile(hFile, pszBuffer, nRead, &dwWrite, NULL); //写到本地文件
dwTotalWrite += dwWrite;
nRead = pHttpFile->Read(pszBuffer, BUFFER_LENGTH);
}
delete[]pszBuffer;
pszBuffer = NULL;
CloseHandle(hFile);
}
else
{
delete[]pszBuffer;
pszBuffer = NULL;
if(pHttpFile != NULL)
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = NULL;
}
if(pHttpConnection != NULL)
{
pHttpConnection->Close();
delete pHttpConnection;
pHttpConnection = NULL;
}
session.Close();
return false;
}
}
catch(...)
{
delete[]pszBuffer;
pszBuffer = NULL;
if(pHttpFile != NULL)
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = NULL;
}
if(pHttpConnection != NULL)
{
pHttpConnection->Close();
delete pHttpConnection;
pHttpConnection = NULL;
//.........这里部分代码省略.........
示例13: UploadFile
//负责接收上传操作的页面的URL ,待上传的本地文件路径
int CWebBase::UploadFile(LPCTSTR strURL, LPCTSTR strLocalFileName)
{
ASSERT(strURL != NULL && strLocalFileName != NULL);
BOOL bResult = FALSE;
DWORD dwType = 0;
CString strServer;
CString strObject;
INTERNET_PORT wPort = 0;
DWORD dwFileLength = 0;
char * pFileBuff = NULL;
CHttpConnection * pHC = NULL;
CHttpFile * pHF = NULL;
CInternetSession cis;
bResult = AfxParseURL(strURL, dwType, strServer, strObject, wPort);
if(!bResult)
{
return FALSE;
}
CFile file;
try
{
if(!file.Open(strLocalFileName, CFile::shareDenyNone | CFile::modeRead))
return FALSE;
dwFileLength = file.GetLength();
if(dwFileLength <= 0)
return FALSE;
pFileBuff = new char[dwFileLength];
memset(pFileBuff, 0, sizeof(char) * dwFileLength);
file.Read(pFileBuff, dwFileLength);
const int nTimeOut = 5000;
cis.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, nTimeOut); //联接超时设置
cis.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); //重试1次
pHC = cis.GetHttpConnection(strServer, wPort); //取得一个Http联接
pHF = pHC->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);
if(!pHF->SendRequest(NULL, 0, pFileBuff, dwFileLength))
{
delete[]pFileBuff;
pFileBuff = NULL;
pHF->Close();
pHC->Close();
cis.Close();
return FALSE;
}
DWORD dwStateCode = 0;
pHF->QueryInfoStatusCode(dwStateCode);
if(dwStateCode == HTTP_STATUS_OK)
bResult = TRUE;
}
catch(CInternetException * pEx)
{
char sz[256] = "";
pEx->GetErrorMessage(sz, 25);
CString str;
str.Format("InternetException occur!\r\n%s", sz);
AfxMessageBox(str);
}
catch(...)
{
DWORD dwError = GetLastError();
CString str;
str.Format("Unknow Exception occur!\r\n%d", dwError);
AfxMessageBox(str);
}
delete[]pFileBuff;
pFileBuff = NULL;
file.Close();
pHF->Close();
pHC->Close();
cis.Close();
return bResult;
}
示例14: Download
CString CHttpRequest::Download (CString strURL, int nMethod, CString strHeaders, CString strData,
CString strFilename,
bool* pbCancelDownload, DWORD dwDownloadId, int& nError, int nApproxContentLength,
HWND hwndProgress, HWND hwndStatus, CString strMsg)
{
gl_stkDownloads.push_back (dwDownloadId);
bool bUseFile = !strFilename.IsEmpty ();
strStatusMsg = bUseFile ? strFilename : strMsg;
// show the UI controls
if (dwDownloadId == gl_stkDownloads.back ())
{
if (hwndProgress != NULL)
{
::PostMessage (hwndProgress, PBM_SETPOS, 0, 0);
::ShowWindow (hwndProgress, SW_SHOW);
}
if (hwndStatus != NULL)
::PostMessage (hwndStatus, SB_SETTEXT, 1, (LPARAM) strStatusMsg.GetBuffer (0));
}
/*
CString strDisplayFilename, strDisplay;
if (!strFilename.IsEmpty () && (pStatus != NULL))
{
strcpy (strDisplayFilename.GetBuffer (strFilename.GetLength () + 1), strFilename.GetBuffer (0));
strDisplayFilename.ReleaseBuffer ();
// needs ellipsis?
CRect r;
pStatus->GetWindowRect (&r);
r.right -= 300;
HDC hdc = ::GetWindowDC (pStatus->GetSafeHwnd ());
::DrawText (hdc, strDisplayFilename, -1, &r, DT_PATH_ELLIPSIS | DT_MODIFYSTRING);
::ReleaseDC (pStatus->GetSafeHwnd (), hdc);
}*/
CHttpConnection* pHttpConnection = NULL;
CHttpFile* pHttpFile = NULL;
LPVOID lpvoid = NULL;
DWORD dwServiceType;
CString strServer, strObject;
INTERNET_PORT nPort;
AfxParseURL (strURL, dwServiceType, strServer, strObject, nPort);
// declare CMyInternetSession object
CInternetSession InternetSession (NULL,
//"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; (R1 1.3))",
1, INTERNET_OPEN_TYPE_PRECONFIG);
CString strRetData;
try
{
// establish the HTTP connection
pHttpConnection = InternetSession.GetHttpConnection (strServer, nPort, "", "");
// open the HTTP request
pHttpFile = pHttpConnection->OpenRequest (nMethod, strObject, NULL, 1, NULL,
NULL, INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT | INTERNET_FLAG_TRANSFER_BINARY);
if (pHttpFile->SendRequest (strHeaders, strHeaders.GetLength (),
static_cast<void*>(strData.GetBuffer (0)), strData.GetLength ()))
{
DWORD dwRet;
// query the HTTP status code
pHttpFile->QueryInfoStatusCode (dwRet);
if (dwRet >= 400)
{
nError = dwRet;
gl_stkDownloads.remove (dwDownloadId);
return "";
}
CString strContentLen;
LPSTR lpszResult = NULL;
UINT nRead = 0, nTotalRead = 0;
lpvoid = malloc (HTTPFILE_BUFFLEN);
// memory error
if (!lpvoid)
{
AfxMessageBox("Error allocating memory");
if (pHttpConnection)
{
pHttpConnection->Close();
delete pHttpConnection;
}
if (pHttpFile)
{
pHttpFile->Close();
delete pHttpFile;
}
nError = -1;
gl_stkDownloads.remove (dwDownloadId);
return "";
}
//.........这里部分代码省略.........
示例15: ConnectUrl
int CHttpRequest::ConnectUrl(TCHAR *sUrl, TCHAR *sReturn, long *lVersion, int *Count)
{
ODS(_T("XFILTER.EXE: GetFromUrl Begin... \n"));
if(sUrl == NULL)
return XERR_INVALID_PARAMETER;
CString strServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType;
if (!AfxParseURL(sUrl, dwServiceType, strServerName, strObject, nPort) ||
dwServiceType != INTERNET_SERVICE_HTTP)
{
ODS(_T("XFILTER.EXE: Internet Invalid Url ..."));
return XERR_INTERNET_URL_ERROR;
}
CInternetSession session(GUI_APP_CLASS_NAME);
CHttpConnection *pServer = NULL;
CHttpFile *pFile = NULL;
int iRet = XERR_SUCCESS;
m_IsConnecting = TRUE;
try
{
pServer = session.GetHttpConnection(strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
pFile->AddRequestHeaders(szHeaders);
pFile->SendRequest();
DWORD dwRet;
pFile->QueryInfoStatusCode(dwRet);
if (dwRet >= 400 && dwRet <= 499)
{
ODS(_T("XFILTER.EXE: Internet Request Error ..."));
iRet = XERR_INTERNET_REQUEST_ERROR;
}
else if(dwRet >= 500 && dwRet <= 599)
{
ODS(_T("XFILTER.EXE: Internet Server Error ..."));
iRet = XERR_INTERNET_SERVER_ERROR;
}
else if(sReturn != NULL)
{
pFile->ReadString(sReturn, MAX_NET_COMMAND_LENTH - 1);
ODS(sReturn);
CString tmpStr = sReturn;
long lVer = atol(tmpStr.Left(MAX_NET_COMMAND_VERSION_LENTH));
if(lVer > *lVersion)
{
*lVersion = lVer;
int i = 1;
while (i < MAX_NET_COMMAND
&& pFile->ReadString((sReturn + MAX_NET_COMMAND_LENTH * i), MAX_NET_COMMAND_LENTH - 1))
{
ODS(sReturn + i * MAX_NET_COMMAND_LENTH);
i ++;
}
*Count = i;
}
else
{
*Count = 1;
}
}
else
{
CString sRet;
pFile->ReadString(sRet);
if(sRet.GetAt(0) != '1')
iRet = XERR_INTERNET_REG_ERROR;
ODS2(_T("XFILTER.EXE: Internet User Register Return Value "),sRet);
}
pFile->Close();
pServer->Close();
}
catch(CInternetException* pEx)
{
pEx->Delete();
iRet = XERR_INTERNET_CONNECT_ERROR;
ODS(_T("XFILTER.EXE: GetFromUrl XERR_INTERNET_CONNECT_ERROR... "));
}
if (pFile != NULL)
delete pFile;
if (pServer != NULL)
delete pServer;
session.Close();
m_IsConnecting = FALSE;
//.........这里部分代码省略.........