本文整理汇总了C++中CHttpFile::SendRequest方法的典型用法代码示例。如果您正苦于以下问题:C++ CHttpFile::SendRequest方法的具体用法?C++ CHttpFile::SendRequest怎么用?C++ CHttpFile::SendRequest使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CHttpFile
的用法示例。
在下文中一共展示了CHttpFile::SendRequest方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DonwLoadFile
BOOL CMainFrame::DonwLoadFile(PSTR pURL, LPSTR SaveAsFilePath)
{
CInternetSession session;
CHttpConnection* pServer = NULL;
CHttpFile * pHttpFile = NULL;
CString strServerName; //去掉http://
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType;
DWORD dwHttpRequestFlags = INTERNET_FLAG_NO_AUTO_REDIRECT; //请求标志
const TCHAR szHeaders[]=_T("Accept: text/*\r\nUser-Agent:HttpClient\r\n");
BOOL OK=AfxParseURL(
pURL,
dwServiceType,
strServerName,
strObject,
nPort );
pServer = session.GetHttpConnection(strServerName, nPort); //获得服务器名
pHttpFile = pServer-> OpenRequest( CHttpConnection::HTTP_VERB_GET,
strObject,
NULL,
1,
NULL,
NULL,
dwHttpRequestFlags);
pHttpFile->AddRequestHeaders(szHeaders);
try
{
pHttpFile->SendRequest(); //发送请求
}
catch (CInternetException* IE)
{
return false;
}
CStdioFile f;
if( !f.Open( SaveAsFilePath,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary ) )
{
return false;
}
TCHAR szBuf[1024];
int length=0;
long a=pHttpFile->GetLength();
while (length=pHttpFile->Read(szBuf, 1023))
f.Write(szBuf,length);
f.Close();
pHttpFile ->Close();
pServer ->Close();
if (pHttpFile != NULL) delete pHttpFile;
if (pServer != NULL) delete pServer;
session.Close();
return true;
}
示例2: pinReminder
bool CLoginDialog::pinReminder(){
CString username, email;
int country=((CComboBox*) GetDlgItem(IDC_COUNTRY))->GetCurSel();
std::string userPhone=countries[country][1];
userPhone.erase(std::find(userPhone.begin(), userPhone.end(), '+'));
userPhone.erase(std::find(userPhone.begin(), userPhone.end(), '-'));
GetDlgItemText(IDC_PHONE,username);
username=(CString)userPhone.c_str()+username;
GetDlgItemText(IDC_EMAIL,email);
std::string header = "/oneworld/forgotpin?number=";
header+=(CT2CA)username;
header+="&email=";
header+=(CT2CA)email;
CInternetSession session;
CHttpConnection *pConnection = session.GetHttpConnection(_T("89.163.142.253"));
char result[500];
CString request(header.c_str());
CHttpFile *pFile = pConnection->OpenRequest(1,request);
if(!pFile->SendRequest())
return false;
//pFile->QueryInfo(HTTP_QUERY_FLAG_REQUEST_HEADERS,result,(LPDWORD)500);
#ifdef _DEBUG
pFile->Read((void*)result,500);
_cprintf("%s",result);
#endif
return true;
}
示例3: GetPageText
ERMsg GetPageText(CHttpConnectionPtr& pConnection, const std::string& URLIn, std::string& text, bool bConvert, DWORD flags)
{
ERMsg msg;
//std::string text;
//INTERNET_FLAG_NO_COOKIES|
CString URL = WBSF::convert(URLIn).c_str();
CHttpFile* pURLFile = pConnection->OpenRequest(_T("GET"), URL, NULL, 1, NULL, NULL, flags);
bool bRep = false;
if( pURLFile!=NULL )
{
int nbTry=0;
while( !bRep && msg)
{
TRY
{
nbTry++;
bRep = pURLFile->SendRequest()!=0;
}
CATCH_ALL(e)
{
DWORD errnum = GetLastError();
if( errnum ==12002 ||errnum==12029)
{
if( nbTry >= 10)
{
msg = UtilWin::SYGetMessage(*e);
}
//try again
}
else if( errnum == 12031 || errnum == 12111)
{
//throw a exception: server reset
THROW( new CInternetException(errnum));
}
else if( errnum ==12003)
{
msg = UtilWin::SYGetMessage(*e);
DWORD size = 255;
TCHAR cause[256]={0};
InternetGetLastResponseInfo( &errnum, cause, &size);
if (_tcslen(cause) > 0)
msg.ajoute(UtilWin::ToUTF8(cause));
}
else
{
CInternetException e(errnum);
msg += UtilWin::SYGetMessage(e);
}
}
END_CATCH_ALL
}
}
示例4: 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;
}
示例5: LoadList
void Conference::LoadList(){
CListCtrl *conf= (CListCtrl*)GetDlgItem(IDC_CONFLIST);
conf->DeleteAllItems();
std::string header = "/oneworld/conf_list?api_token=";
header+=((CmicrosipDlg*)GetParent())->getToken();
CInternetSession session;
CHttpConnection *pConnection = session.GetHttpConnection(_T("89.163.142.253"));
char result[500];
CString request(header.c_str());
CHttpFile *pFile = pConnection->OpenRequest(1,request);
if(!pFile->SendRequest())
return;
pFile->Read((void*)result,500);
char* status = strchr(result,']'); //checking if data is receive and is parseable
char* eom = strchr(result,'}');
#ifdef _DEBUG
_cprintf("Size: %p, %p, %d\n",result, status, (status-result));
#endif
if(status==NULL)
result[eom-result+1]='\0';
else if(status - result < 4998)
result[status - result +2]='\0';
#ifdef _DEBUG
_cprintf("Result: %s\n",result);
#endif
cJSON *root = cJSON_Parse(result);
cJSON *msg = cJSON_GetObjectItem(root,"msg");
if((status==NULL && msg == NULL) || status-result >= 4999 )
return;
else if(status==NULL)
return;
cJSON *data = cJSON_GetObjectItem(root,"data");
int size=cJSON_GetArraySize(root);
#ifdef _DEBUG
_cprintf("Size: %d\n",size);
#endif
size=cJSON_GetArraySize(data);
#ifdef _DEBUG
_cprintf("Size: %d\n",size);
#endif
for(int i=0;i<size;i++){
cJSON* item= cJSON_GetArrayItem(data,i);
CString confNum(cJSON_GetObjectItem(item,"confno")->valuestring);
CString pin(cJSON_GetObjectItem(item,"pin")->valuestring);
#ifdef _DEBUG
_cprintf("Item: %s\n",(CT2CA)confNum);
_cprintf("Pin: %s\n",(CT2CA)pin);
#endif
int index = conf->InsertItem(i, confNum);
conf->SetItemText(index, 1, pin);
//conf->SetItemData(i, &confNum);
}
}
示例6: registration
bool CLoginDialog::registration(){
CString phone, name, email;
int country=((CComboBox*) GetDlgItem(IDC_COUNTRY))->GetCurSel();
GetDlgItemText(IDC_PHONE,phone);
GetDlgItemText(IDC_NAME,name);
GetDlgItemText(IDC_EMAIL,email);
std::string header = "/oneworld/webreg?country=";
header+=countries[country][2];
header+="&number=";
header+=(CT2CA)phone;
header+="&name=";
header+=(CT2CA)name;
header+="&email=";
header+=(CT2CA)email;
header+="&countrycode=";
header+=countries[country][2];
CInternetSession session;
CHttpConnection *pConnection = session.GetHttpConnection(_T("89.163.142.253"));
char result[500];
CString request(header.c_str());
CHttpFile *pFile = pConnection->OpenRequest(1,request);
if(!pFile->SendRequest())
return false;
//pFile->QueryInfo(HTTP_QUERY_FLAG_REQUEST_HEADERS,result,(LPDWORD)500);
#ifdef _DEBUG
pFile->Read((void*)result,500);
_cprintf("%s",result);
#endif
CString rest(result);
int start=rest.Find(_T("success\":\""));
if(start<0)
return false;
start+=((CString)_T("success\":\"")).GetLength();
int end=rest.Find(_T("\""),start);
if(end<0)
return false;
CString success=rest.Mid(start, end-start);
#ifdef _DEBUG
_cprintf("%s",(CT2CA)success);
_cprintf("%s",result);
#endif
start=rest.Find(_T("msg\":\""));
start+=((CString)_T("msg\":\"")).GetLength();
end=rest.Find(_T("\""),start);
CString msg=rest.Mid(start, end-start);
SetDlgItemText(IDC_LOGTEXT,msg);
Sleep(2000);
return true;
}
示例7: 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;
}
示例8: userProfile
DWORD CLoginDlg::userProfile(LPCTSTR serverURL, LPCTSTR requestPage)
{
#ifdef _HTTPS
CInternetSession session(_T("HelloChat"), INTERNET_FLAG_SECURE);
CHttpConnection* pConnection = session.GetHttpConnection(serverURL, INTERNET_SERVICE_HTTP, INTERNET_DEFAULT_HTTPS_PORT);
CString strToken = L"token:";
strToken = strToken + m_strMyToken + L"\r\n";
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, requestPage, NULL, 1, NULL, NULL, INTERNET_FLAG_SECURE | INTERNET_FLAG_RELOAD |
INTERNET_FLAG_DONT_CACHE |
INTERNET_FLAG_NO_COOKIES);
#else
CInternetSession session(_T("HelloChat"), PRE_CONFIG_INTERNET_ACCESS);
CHttpConnection* pConnection = session.GetHttpConnection(serverURL);
CString strToken = L"token:";
//strToken = strToken + m_strToken + L"\r\n";
strToken = strToken + m_strMyToken + L"\r\n";
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, requestPage, NULL, 1, NULL, NULL, INTERNET_FLAG_RELOAD |
INTERNET_FLAG_DONT_CACHE |
INTERNET_FLAG_NO_COOKIES);
#endif
VERIFY(pFile->AddRequestHeaders(HEADER));
VERIFY(pFile->AddRequestHeaders(strToken));
VERIFY(pFile->SendRequest());
// GET POST STATUS
DWORD dwPostStatus = 0;
VERIFY(pFile->QueryInfoStatusCode(dwPostStatus));
CString strBuffer = L"";
BOOL brtn = pFile->ReadString(strBuffer);
char* rtnBuffer = LPSTR(LPCTSTR(strBuffer));
if (dwPostStatus == HTTP_STATUS_OK)
{
BOOL bRtn = dataParser(rtnBuffer);
if (!bRtn){
AfxMessageBox(L"User Info Paser Error");
}
}
else{
CComm func;
func.WriteErrorLog(rtnBuffer);
}
pFile->Close();
return dwPostStatus;
}
示例9: 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;
}
示例10: OnDelete
void Conference::OnDelete()
{
CListCtrl *list= (CListCtrl*)GetDlgItem(IDC_CONFLIST);
POSITION pos = list->GetFirstSelectedItemPosition();
CString confNum;
if (pos)
{
int i = list->GetNextSelectedItem(pos);
//Call *pCall = (Call *) list->GetItemData(i);
confNum=list->GetItemText(i,0);
}
if(confNum.GetLength()==0)
return;
std::string header = "/oneworld/conf_del?api_token=";
header+=((CmicrosipDlg*)GetParent())->getToken();
header+="&confno=";
header+=(CT2CA)confNum;
#ifdef _DEBUG
_cprintf("Request: %s\n",header);
#endif
CInternetSession session;
CHttpConnection *pConnection = session.GetHttpConnection(_T("89.163.142.253"));
char result[500];
CString request(header.c_str());
CHttpFile *pFile = pConnection->OpenRequest(1,request);
if(!pFile->SendRequest())
return;
pFile->Read((void*)result,500);
char* status = strchr(result,']'); //checking if data is receive and is parseable
char* eom = strchr(result,'}');
#ifdef _DEBUG
_cprintf("Size: %p, %p, %d\n",result, status, (status-result));
#endif
if(status==NULL)
result[eom-result+1]='\0';
else if(status - result < 498)
result[status - result +2]='\0';
#ifdef _DEBUG
_cprintf("Result: %s\n",result);
#endif
LoadList();
}
示例11: GetCompanyListFromTallyServer
/*
* Connect to the Tally over a specific port and get all the companies
*/
BOOL CTallyExporterDlg::GetCompanyListFromTallyServer(int port, CompanyListResponse& companyListResponseRef)
{
CInternetSession session(_T("My Session"));
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
CString strServerName;
DWORD dwRet = 0;
CString strParam = "<ENVELOPE><HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER><BODY><EXPORTDATA><REQUESTDESC><REPORTNAME>List of Companies</REPORTNAME></REQUESTDESC></EXPORTDATA></BODY></ENVELOPE>";
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded;Accept-Encoding: gzip,deflate");
CString acceptedTypes[] = {_T("text/html")};
pServer = session.GetHttpConnection(_T("localhost"),NULL, port, NULL, NULL);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T(""), NULL,1,(LPCTSTR*)acceptedTypes,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strParam, strParam.GetLength());
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_OK)
{
CHAR szBuff[1024];
while (pFile->Read(szBuff, 1024) > 0)
{
printf_s("%1023s", szBuff);
}
GetCompanyListFromCSVResponse(companyListResponseRef, szBuff);
}
else
{
//Do something as server is not sending response as expected.
}
delete pFile;
delete pServer;
}
catch (CInternetException* pEx)
{
//catch errors from WinInet
TCHAR pszError[64];
pEx->GetErrorMessage(pszError, 64);
_tprintf_s(_T("%63s"), pszError);
}
session.Close();
return false;
}
示例12: GetTallyTBResponse
/* ===================================================================
* GET Tally TB Response for a given request
* ===================================================================
*/
BOOL CTallyExporterDlg::GetTallyTBResponse(CString& xmlTBRequestRef,vector<string>& allRowsOfTBRef, int port)
{
CInternetSession session(_T("TB Session"));
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
CString strServerName;
DWORD dwRet = 0;
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded;Accept-Encoding: gzip,deflate");
CString acceptedTypes[] = {_T("text/html")};
pServer = session.GetHttpConnection(_T("localhost"),NULL, port, NULL, NULL);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T(""), NULL,1,(LPCTSTR*)acceptedTypes,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)xmlTBRequestRef, xmlTBRequestRef.GetLength());
pFile->QueryInfoStatusCode(dwRet);
CString csvLinesToBeRead;
CString& csvLinesToBeReadRef = csvLinesToBeRead;
if (dwRet == HTTP_STATUS_OK)
{
while (pFile->ReadString(csvLinesToBeReadRef) == TRUE)
{
allRowsOfTBRef.push_back((LPCTSTR)csvLinesToBeReadRef);
}
}
else
{
//Do something as server is not sending response as expected.
}
delete pFile;
delete pServer;
}
catch (CInternetException* pEx)
{
//catch errors from WinInet
TCHAR pszError[64];
pEx->GetErrorMessage(pszError, 64);
_tprintf_s(_T("%63s"), pszError);
}
session.Close();
return false;
}
示例13: GetPageDirect
CString GetPageDirect(CString rAddress)
{
CString szResult;
DWORD dwRet = 0; // HTTP返回码
CString strServerName, strObject;
DWORD dwSvrType;
INTERNET_PORT nPort;
const TCHAR szHeaders[] = _T("Accept: text/*\r\nUser-Agent: CInternetThread\r\n");
AfxParseURL(rAddress, dwSvrType, strServerName, strObject, nPort);
CInternetSession session("MySessionDirect");
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{
pServer = session.GetHttpConnection(strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
pFile->AddRequestHeaders(szHeaders);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet < 400)
{
char szBuff[1024];
UINT nRead = pFile->Read(szBuff, 1023);
while (nRead > 0)
{
szBuff[nRead] = '\0';
szResult.Append(szBuff);
nRead = pFile->Read(szBuff, 1023);
}
}
delete pFile;
delete pServer;
}
catch (CInternetException* pEx)
{
//uiResult = 0;
}
session.Close();
return szResult;
}
示例14: OnBnClickedConfsubmit
void Conference::OnBnClickedConfsubmit()
{
std::string header = "/oneworld/conf_create?api_token=";
header+=((CmicrosipDlg*)GetParent())->getToken();
header+="&pin=";
CString pinNum;
GetDlgItemText(IDC_CONFPIN,pinNum);
header+=(CT2CA)pinNum;
header+="&length=0";
CInternetSession session;
CHttpConnection *pConnection = session.GetHttpConnection(_T("89.163.142.253"));
char result[500];
CString request(header.c_str());
CHttpFile *pFile = pConnection->OpenRequest(1,request);
if(!pFile->SendRequest())
return;
pFile->Read((void*)result,500);
char* status = strchr(result,']'); //checking if data is receive and is parseable
char* eom = strchr(result,'}');
#ifdef _DEBUG
_cprintf("Size: %p, %p, %d\n",result, status, (status-result));
#endif
if(status==NULL)
result[eom-result+1]='\0';
else if(status - result < 498)
result[status - result +2]='\0';
#ifdef _DEBUG
_cprintf("Result: %s\n",result);
#endif
cJSON *root = cJSON_Parse(result);
cJSON *success = cJSON_GetObjectItem(root,"success");
#ifdef _DEBUG
_cprintf("Success: %s\n",success->valuestring);
#endif
LoadList();
}
示例15: GetHTTPData
int GetHTTPData(const char * url, unsigned short **body, string referer, bool b_post, string post_data)
{
CInternetSession session("Azereus 2.2.0.2");
//DWORD dwValue;
//session.QueryOption(INTERNET_OPTION_CONNECT_TIMEOUT, dwValue);
//TRACE("timeout: %d\n", dwValue );
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 10*1000);
CHttpConnection * pServer = NULL;
CHttpFile* pFile = NULL;
bool bProgressMode = false;
bool bStripMode = false;
bool isGzipped = false;
string line = "";
int size = 0;
unsigned short * buf = *body;
try {
CString strServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwServiceType;
if (!AfxParseURL(url, dwServiceType, strServerName, strObject, nPort) ||
dwServiceType != INTERNET_SERVICE_HTTP)
{
//TRACE("Error: can only use URLs beginning with http://\n");
//TRACE("URL: '%s'\n", url);
line = "request failed - can only use URLs beginning with http://";
}
if (bProgressMode)
{
TRACE( _T("Opening Internet..."));
VERIFY(session.EnableStatusCallback(TRUE));
}
pServer = session.GetHttpConnection(strServerName, INTERNET_FLAG_DONT_CACHE, nPort);
string file = url;
int file_start = -1;
if(file.length() > 8) {
file_start = (int)file.find("//");
file_start = (int)file.find("/", file_start+2);
}
if(file_start > 0) file = file.substr(file_start);
else file = "";
if(!b_post) {
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,file.c_str(), referer.c_str());
string header = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
header += "Accept-Language: en-us,en;q=0.5\n\r";
header += "Accept-Encoding: gzip\r\n";
header += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n\r";
pFile->SendRequest(header.c_str(),(DWORD)header.length());
}
else {
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, file.c_str(), referer.c_str());
string header = "Content-Type: application/x-www-form-urlencoded\n\r";
pFile->SendRequest(header.c_str(),(DWORD)header.length(),(LPVOID)post_data.c_str(), (DWORD)post_data.length() );
}
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 diaTRACE, bail out
if (dwPrompt != ERROR_INTERNET_FORCE_RETRY)
{
TRACE(_T("Access denied: Invalid password\n"));
line = "request failed - Access denied: Invalid password";
}
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)
{
//.........这里部分代码省略.........