我正在研究一个老式的 linux 变体(确切地说是 QNX),并且需要一种方法来获取网页(没有 cookie 或登录,目标 URL 只是一个文本文件),只使用套接字和数组。
有人有这个片段吗?
注意:我不控制服务器,除了盒子上已有的东西外,我几乎没有什么可使用的(考虑到限制,添加额外的库并不是真的“容易”——尽管我确实喜欢 libcurl)
如果你想要 SSL 支持或任何花哨的东西,我会看看libcurl 。
但是,如果您只想从端口 80 获取一个简单的网页,那么只需打开一个 tcp 套接字,发送“ GET /index.html HTTP/1.0\n\r\n\r
”并解析输出。
我确实有一些代码,但它也支持(Open)SSL,所以在这里发布有点长。
在本质上:
解析 URL(拆分 URL 方案、主机名、端口号、方案特定部分
创建套接字:
s = socket(PF_INET, SOCK_STREAM, proto);
sockaddr_in
使用远程 IP 和端口填充结构
将套接字连接到远端:
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);
注意:上面的伪代码会收集响应头和数据。两者之间的分割是第一个空行。