在C中获取网页最简单的方法是什么?
我正在研究一个旧的学校linux变种(确切地说是QNX)并且需要一种方法来获取网页(没有cookie或登录,目标URL只是一个文本文件),只使用套接字和数组。
有人为此获得了一个片段吗?
注意:我不控制服务器,除了盒子上的内容之外我几乎没有工作(添加额外的库并不是真的“容易”给出约束 – 虽然我喜欢libcurl)
我确实有一些代码,但它也支持(Open)SSL,因此在这里发布它有点长。
在本质上:
-
解析URL(拆分URL方案,主机名,端口号,方案特定部分
-
创建套接字:
s = socket(PF_INET, SOCK_STREAM, proto);
-
使用远程IP和端口填充
sockaddr_in
结构 -
将套接字连接到远端:
err = connect(s, &addr, sizeof(addr));
-
发出请求字符串:
n = snprinf(headers, "GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n", ...);
-
发送请求字符串:
write(s, headers, n);
-
读取数据:
while (n = read(s, buffer, bufsize) > 0) { ... }
-
关闭套接字:
close(s);
nb:上面的伪代码将收集响应头和数据。 两者之间的分裂是第一个空白行。
如果你想要SSL支持或任何花哨的话,我会看看libcurl 。
但是,如果您只想从端口80获取一个简单的网页,那么只需打开一个tcp套接字,发送“ GET /index.html HTTP/1.0\n\r\n\r
”并解析输出。