google搜索 C++ socket Http协议。
解决方案 »
- 知道了QQ聊天窗口的输入框句柄,怎么才能在里面发送字符串?
- CListCtrl怎么让它的滚动条一直在底部?
- 新手提问:只有头文件和.DLL文件,没有相应的.lib文件,能不能调用DLL中的函数啊?
- 作选项卡这类东西到底用属性页控件好还是选项卡控件好——————?
- editbox细节一问
- 一个VC++ API的群,大家帮忙顶一下。。。。。。。。。。。。。。。。。。。。
- 自己编写程序实现editbox的逻辑,但无法处理半个汉字问题
- 哪位有《Visual C++编程高手》一书的范例源代码
- 关于VC和datagrid控件的使用
- 有谁写过梯级洪水调节的程序(结合数据库的),请这走!
- 怎么样实现发送图象?
- sql 系统存储过程调用问题,请大家帮忙了!!!
void Downlaod(LPCTSTR lpszURL)
{
CInternetSession session("My Session");
CStdioFile* pFile = NULL;
if((pFile = session.OpenURL(lpszURL)) != NULL)
{
BYTE szBuff[1024];
while (pFile->Read(szBuff,1024) > 0)
{
//process
}
delete pFile;
} session.Close();
}
tstring firstUrl = _T("http://www.haowan.cn/szyzkj.jsp?p=11393884,2254654");
if(httpClient.GetRequest(firstUrl.c_str()))
{
DWORD dwLen = httpClient.GetBodyLength();
const BYTE *lpBody = httpClient.GetBody();
if(dwLen == 0 || lpBody == NULL)
return FALSE;
}
// CopyRight (C) 2006 - 2008,印朝辉,<[email protected]>
// 功能: 支持Cookie HttpClient 对象类
// 遵守LGPL协议,请不要修改头部信息
//////////////////////////////////////////////////////////////////////////////////////
class CHttpClientWithCookie : public CAtlHttpClient
{
protected:
typedef struct tagCookieItem
{
tstring name; //Cookie 名字
tstring value; //Cookie 值
tstring domain; //Cookie 域名
tstring path; //Cookie 路径
}CookieItem,*LPCookieItem; typedef std::map<tstring,CookieItem> CookieMap;
CookieMap m_cookieMap; //存保通信中Cookie信息public:
bool GetRequest(LPCTSTR url)
{
CAtlNavigateData navData;
navData.SetMethod(ATL_HTTP_METHOD_GET);
tstring extraHeaders = GenCookieHeader();
navData.SetExtraHeaders(extraHeaders.c_str());
navData.SetFlags(navData.GetFlags()&~ATL_HTTP_FLAG_PROCESS_RESULT);
return Navigate(url,&navData);
} bool PostRequest(LPCTSTR url,LPBYTE postData,DWORD len)
{
CAtlNavigateData navData;
navData.SetMethod(ATL_HTTP_METHOD_POST);
navData.SetPostData(postData,len,_T("application/x-www-form-urlencoded"));
tstring extraHeaders = GenCookieHeader();
navData.SetExtraHeaders(extraHeaders.c_str());
navData.SetFlags(navData.GetFlags()&~ATL_HTTP_FLAG_PROCESS_RESULT);
return Navigate(url,&navData);
} bool HttpRedirect()
{
bool isRight = false;
if(GetStatus() == 301 || GetStatus() == 302 || GetStatus() == 303)
{
CString strValue;
if (GetHeaderValue(_T("Location"), strValue))
{
//计算正确URL
CUrl url;
if(!url.CrackUrl(strValue))
{
LPCURL pCurUrl = GetCurrentUrl();
if(pCurUrl)
{
CUrl newUrl;
CString strNewUrl;
strNewUrl.Format(_T("%s://%s%s"),pCurUrl->GetSchemeName(),pCurUrl->GetHostName(),strValue);
newUrl.CrackUrl(strNewUrl);
url = *pCurUrl;
url.SetExtraInfo(newUrl.GetExtraInfo());
url.SetUrlPath(newUrl.GetUrlPath());
}
else
return isRight;
} CString strURL;
DWORD dwLen = ATL_URL_MAX_PATH_LENGTH;
url.CreateUrl(strURL.GetBuffer(ATL_URL_MAX_PATH_LENGTH),&dwLen); //正确计算URL,重定向
CAtlNavigateData navData;
navData.SetMethod(ATL_HTTP_METHOD_GET);
tstring extraHeaders = GenCookieHeader();
navData.SetExtraHeaders(extraHeaders.c_str());
navData.SetFlags(navData.GetFlags()&~ATL_HTTP_FLAG_PROCESS_RESULT);
return Navigate(strURL,&navData);
}
}
return isRight;
} tstring GenCookieHeader()
{
if(m_cookieMap.size() == 0)
return _T("");
tstring result = _T("Cookie: ");
CookieMap::iterator it = m_cookieMap.begin();
while(it != m_cookieMap.end())
{
if(it != m_cookieMap.begin())
result+=_T("; ");
result += (*it).second.name;
result += _T("=");
result += (*it).second.value;
it ++;
}
result += _T("\r\n");
return result;
} void OnSetCookie(LPCTSTR cookie)
{
CookieItem cookieItem;
vector<tstring> itemVect;
Util::split(itemVect,tstring(cookie),';');
vector<tstring>::iterator it = itemVect.begin();
while(it != itemVect.end())
{
tstring value = Util::trim((*it));
std::pair<tstring,tstring> item;
Util::splitSingle(item,value,'=');
if(!item.first.empty() && !item.second.empty())
{
//cookie值
if(it == itemVect.begin())
{
cookieItem.name = item.first;
cookieItem.value = item.second;
}
else
{
if(_tcsicmp(item.first.c_str(),_T("domain")) == 0)
{
cookieItem.domain = item.second;
}
else if(_tcsicmp(item.first.c_str(),_T("path")) == 0)
{
cookieItem.path = item.second;
}
}
}
it ++;
}
CookieMap::iterator cit = m_cookieMap.find(cookieItem.name);
if(cit != m_cookieMap.end())
{
(*cit).second = cookieItem;
}
else
{
m_cookieMap.insert(std::pair<tstring,CookieItem>(cookieItem.name,cookieItem));
}
}
};
#include <atlsocket.inl>
#include <atlbase.h>
#include <atlrx.h>
#include <atlhttp.h>