0

我有一些图像要使用 HTTP 下载。我得到了这些图像的 URL,如何构建基于 TCP 的 HTTP 缓冲区来下载图像?

我目前的平台没有库,这个平台唯一支持的语言是 C,所以我必须为这些资源构建 HTTP 缓冲区。

目前我已经构建了正常的API请求,它们都是HTTP请求,每个请求都有0个或多个参数。但是图片请求只有一个 URL,比如http://some-image.jpg,看起来只是一个下载作业,没有 API 参数,没有授权,很简单,但是如何构造 TCP 请求呢?

4

3 回答 3

3

您必须实现 HTTP 协议或其子集。有开源实现。例如:

https://github.com/bagder/curl/tree/master/lib

https://github.com/joshthecoder/libhttp

于 2012-05-21T07:09:11.643 回答
1

如何构建基于 TCP 的 HTTP 缓冲区来下载图像?

别再想TCP了。它有自己的缓冲区,与 HTTP 级别发生的事情无关。

您真的不想实现自己的 HTTP 堆栈 - 这不是微不足道的。已经有几个写得很好的 - 我建议使用libcurl

于 2012-05-21T08:30:46.343 回答
1

根据http://www.jmarshall.com/easy/http/#sample,我像这样构建我的 TCP 请求:

sprintf(tcp_send_buf, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", img_path, img_host);

/* I wrapped TCP APIs for convenient, hope you understand it... */
set_host_and_port(img_host, 80);
tcp_send(tcp_send_buf, strlen(tcp_send_buf), recv_callback);

在我的 上recv_callback,我得到了这样的服务器响应:

HTTP/1.1 200 OK
Content-Length: 42299
Content-Type: image/jpeg
Last-Modified: Mon, 02 Jul 2007 07:58:47 GMT
Accept-Ranges: bytes
ETag: "e2c8b5d17ebcc71:15d5"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Fri, 25 May 2012 01:33:57 GMT

<binary image data>

我从 Chrome 下载了图像,它的大小与 相同Content-Length: 42299,我想我得到了图像缓冲区。

于 2012-05-25T02:03:13.840 回答