什么';用C语言抓取网页最简单的方法是什么?
我正在研究一种老式的linux变体(确切地说是QNX),需要一种只使用套接字和数组抓取网页的方法(没有cookie或登录,目标URL只是一个文本文件) 有人知道这个的片段吗什么';用C语言抓取网页最简单的方法是什么?,c,sockets,webpage,C,Sockets,Webpage,我正在研究一种老式的linux变体(确切地说是QNX),需要一种只使用套接字和数组抓取网页的方法(没有cookie或登录,目标URL只是一个文本文件) 有人知道这个的片段吗 注意:我不控制服务器,除了盒子上已经有的东西之外,我几乎没有什么可以处理的(添加额外的库并不是很容易,因为有一些限制——尽管我很喜欢libcurl)我有一些代码,但它也支持(开放)SSL,所以在这里发布有点长 实质上: 解析URL(拆分URL方案、主机名、端口号、方案特定部分 创建套接字: s=socket(PF_INET
注意:我不控制服务器,除了盒子上已经有的东西之外,我几乎没有什么可以处理的(添加额外的库并不是很容易,因为有一些限制——尽管我很喜欢libcurl)我有一些代码,但它也支持(开放)SSL,所以在这里发布有点长 实质上:
- 解析URL(拆分URL方案、主机名、端口号、方案特定部分
- 创建套接字:
s=socket(PF_INET,SOCK_STREAM,proto);
- 用远程IP和端口填充结构中的
sockaddr\u
- 将插座连接到远端:
err=connect(s,&addr,sizeof(addr));
- 生成请求字符串:
n=snprinf(标题,“GET/%s HTTP/1.0\r\n邮件:%s\r\n\r\n”,…);
- 发送请求字符串:
write(s,header,n);
- 读取数据:
while(n=read(s,buffer,bufsize)>0){ ... }
- 关闭插座:
关闭;
但是,如果您只想从端口80获取一个简单的网页,那么只需打开一个tcp套接字,发送“
get/index.html HTTP/1.0\n\r\n\r
”然后解析输出。你能保证没有代理、没有SSL、没有gzip吗?你能控制服务器吗?你说过只使用套接字和数组,但是如果你想重新考虑,可以使用wget并将其输出传输到一个文件处理程序:file*fp=popen(“wget--quiet-O-)不重要,但QNX什么时候开始成为Linux变体了?它们都类似于Unix,但它们之间没有直接关系。QNX是一个微核,众所周知,Linus不喜欢这些。你似乎错过了请求,即发送GET/blah.htm。我在你发表评论时添加了它。很好的详细回答,+1(可能将SSL代码放在pastebin上?)请发布您的代码片段,该代码片段也支持SSLI,我会看看我能做些什么-它有点旧,如果要公开显示,可能还需要添加一些注释:)rE:libcurl-并且添加了几个100KB,天知道你的程序的可执行文件中有多少库依赖项…当我这样做的时候,我得到了400-错误的请求
。请不要告诉我我的答案是在2009年写的。如果web服务器支持HTTP 1.0,这应该仍然有效。但是越来越难找到这样的网站现在不需要TLS。接受的答案是你的最佳选择。否则,尝试一些客户端LIB。