【网络编程】httpClient抓取网页--Windows

最近项目需要用到网页抓取下载等,简单说就是编写一个可用的httpClient,故总结如下。

先是Windows下,发现用MFC的话,可以直接利用CInternetSession和CHttpFile,简单实现如下:

//需要导入库    
#include "stdio.h"
#include "afxinet.h"
char * url = "http://www.baidu.com";

int main(int argc, char* argv[])   
{    
      CInternetSession session("HttpClient"); //会话     
      CHttpFile * pfile = NULL ; 
      CString content; 

      pfile=(CHttpFile *)session.OpenURL(url); 

      DWORDdwStatusCode;    
      pfile-> QueryInfoStatusCode(dwStatusCode);   
    if(dwStatusCode ==HTTP_STATUS_OK)    
       
      //charsRev[1024];
           
          CString data;   
          while (pfile ->ReadString(data))
           
            content +=  data;
           
          content.TrimRight();   
          printf(" %s\n ",(LPCTSTR)content);    
       
     
    pfile -> Close();   
    delete pfile;   
    session.Close(); 
}

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 可能出现问题:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1.【VC++ 6.0编译错误】:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved externalsymbol __beginthreadex 
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved externalsymbol __endthreadex 
  【说       明】:这是因为MFC要使用多线程时库
  【解决   方法】:[Project] -->[Settings] --> 选择"C/C++"属性页, 
                        在Category中选择CodeGeneration, 
                        再在Userun-time library中选择DebugMultithreaded或者multithreaded 
2.【中文乱码问题】:抓包显示中文乱码
  【说         明】:服务器中文编码格式与客户端中文编码格式不一致。
                    遇到的情况是,Server是采用UTF-8,故接收后要再进行ASCII转码
  【解决  方法】:从utf8编码的char*转为ucs2的wchar_t*,
          再用WideCharToMultiByte转为 ASCII的char*。
  //notepad++源码里面的utf8_to_ascii函数就完成了所需的转换。

转码code如下:
      CString data;   
      while(pfile -> ReadString(data))
       
      char*pStr = data.GetBuffer(data.GetLength());//取得str对象的原始字符串
      intnBufferSize = MultiByteToWideChar(CP_UTF8, 0, pStr, -1, NULL, 0);//取得所需缓存的多少
      wchar_t *pBuffer =(wchar_t*)malloc(nBufferSize *sizeof(wchar_t));//申请缓存空间
      MultiByteToWideChar(CP_UTF8, 0, pStr, -1 , pBuffer,nBufferSize*sizeof(wchar_t));//转码
      content + = pBuffer;
      free(pBuffer);//释放缓存
       
      //得到content


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值