c++怎么用socket下载页面源码?

东子同学 2015-08-11 10:00:49
原先用wininet实现过这个功能。但wininet都把网络通信的细节都封装好了。所以想着怎么用原生的win API来实现这个功能。写的时候遇到点麻烦,还望前辈指教。在用SOCKADDR_IN的sin_addr.s_addr时,要传入一个类似于(127.0.0.1)ip地址。我想得到这个https://www.baidu.com/s?&wd=www.sina.com的源码,但是windows下gethostbyname()只能识别像www.baidu.com这样的url。请问类似于这个问题我该怎么做???
...全文
128 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
东子同学 2015-08-12
  • 打赏
  • 举报
回复
谢谢大家。深受4#的启发。
cobra_chen 2015-08-12
  • 打赏
  • 举报
回复
4#说的对 也可以用libcurl,这个开源库做这个很不错的。
mujiok2003 2015-08-11
  • 打赏
  • 举报
回复
很简单,TCP socket连接到 baidu.com后send request:
GET /search?q=https%3A%2F%2Fwww.baidu.com%2Fs%3F%26wd%3Dwww.sina.com&pc=MOZI&form=MOZCON HTTP/1.1

Host: www.bing.com

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Cookie: SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=231DBD79C46044A192D9E6E194C20BE2; SRCHUSR=AUTOREDIR=0&GEOVAR=&DOB=20150614; _EDGE_V=1; MUID=326E132E24B96A2D393614E825186B05; MUIDB=326E132E24B96A2D393614E825186B05; SRCHHPGUSR=CW=1903&CH=541&DPR=1; _UR=OMW=1; ANON=A=D33DEE1A172AD4B768275FB7FFFFFFFF&E=1144&W=1; NAP=V=1.9&E=10ea&C=5sw-m-6q5u_DBCQI7NEq_2EIs6YdryvvkhgBPOG-Ii8_r9DIqYDqQQ&W=1; _U=1llhdH9Xo_-2rNsKeSKzNFM0qKpBjPoY1ZaUMlFJ3WYyUIxAFGoLS414dM8r0K2k8veYiJNBEeMSEdb54vOS-wVO13fd5FwoAvGR9FCnQdB_Qn3-44wjEvr7yRnjsyJXw; _US=1Adn2NKOUiSotRVARwmIMXKf3V7proD3PX1HHpGCaelYi; _SS=SID=16C1386B59C84B36BD744DD9C2245508&PC=MOZI&HV=1439303631; SRCHS=PC=MOZI; _EDGE_S=SID=2996AEB7ED0A62820E84A6B7ECAB6361; _FP=hta=on; SCRHDN=ASD=0&DURL=#

Connection: keep-alive

Cache-Control: max-age=0
然后recv response
Evankaka 版主 2015-08-11
  • 打赏
  • 举报
回复
WinInet(“Windows Internet”)API帮助程序员使用三个常见的Internet协议,这三个协议是用于World Wide Web万维网的超文本传输协议(HTTP:Hypertext Transfer Protocol)、文件传输协议(FTP:File Transfer Protocol)和另一个称为Gopher的文件传输协议。WinInet函数的语法与常用的Win32 API函数的语法类似,这使得使用这些协议就像使用本地硬盘上的文件一样容易。 这是我刚查的,WinInet就是使用HTTP协议的啊,不知你是不是用这个来做的
东子同学 2015-08-11
  • 打赏
  • 举报
回复
引用 1 楼 Evankaka 的回复:
网页下载使用的是http协议,不是tcp/udp协议。用socket不能下载网页上的数据
不是吧,那为什么可以下载www.baidu.com这个url的源码呢?
Evankaka 版主 2015-08-11
  • 打赏
  • 举报
回复
网页下载使用的是http协议,不是tcp/udp协议。用socket不能下载网页上的数据

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧