google搜索 C++ socket Http协议。

解决方案 »

  1.   

    给分,给你原代码,发邮件到[email protected]索取,或访问www.thirddata.com
      

  2.   

    下载网页倒是容易的MFC上就有例子#include <afxinet.h> 
    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();
    }
      

  3.   

    CHttpClientWithCookie httpClient;
    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;
    }
      

  4.   

    ///////////////////////////////////////////////////////////////////////////////////////
    // 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));
    }
        }
    };
      

  5.   

    增加ATL支持
    #include <atlsocket.inl>
    #include <atlbase.h>
    #include <atlrx.h>
    #include <atlhttp.h>