什么';用C语言抓取网页最简单的方法是什么?

什么';用C语言抓取网页最简单的方法是什么?,c,sockets,webpage,C,Sockets,Webpage,我正在研究一种老式的linux变体(确切地说是QNX),需要一种只使用套接字和数组抓取网页的方法(没有cookie或登录,目标URL只是一个文本文件) 有人知道这个的片段吗 注意:我不控制服务器,除了盒子上已经有的东西之外,我几乎没有什么可以处理的(添加额外的库并不是很容易,因为有一些限制——尽管我很喜欢libcurl)我有一些代码,但它也支持(开放)SSL,所以在这里发布有点长 实质上: 解析URL(拆分URL方案、主机名、端口号、方案特定部分 创建套接字: s=socket(PF_INET

我正在研究一种老式的linux变体(确切地说是QNX),需要一种只使用套接字和数组抓取网页的方法(没有cookie或登录,目标URL只是一个文本文件)

有人知道这个的片段吗


注意:我不控制服务器,除了盒子上已经有的东西之外,我几乎没有什么可以处理的(添加额外的库并不是很容易,因为有一些限制——尽管我很喜欢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){
    ...
    }

  • 关闭插座:

    关闭;

注意:上面的伪代码将收集响应头和数据。两者之间的分割是第一个空行。

如果您想要SSL支持或任何花哨的东西,我会看看


但是,如果您只想从端口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。