在C中获取网页最简单的方法是什么?

时间:2009-05-05 15:08:48

标签: c sockets webpage

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

任何人都有这个片段吗?

注意:我没有控制服务器,除了盒子上已经存在的东西之外我几乎没有工作(添加额外的库并不是真的“容易”给出约束 - 虽然我喜欢libcurl )

2 个答案:

答案 0 :(得分:9)

如果您想要SSL支持或任何想象,我会看libcurl

但是如果您只想从端口80获取一个简单的网页,那么只需打开一个tcp套接字,发送“GET /index.html HTTP/1.0\n\r\n\r”并解析输出。

答案 1 :(得分:8)

我确实有一些代码,但它也支持(开放)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:上面的伪代码会收集响应标头数据。两者之间的分歧是第一个空白行。