如何使用基于TCP的HTTP下载图像?

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

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

目前我已经构建了正常的API请求,它们都是HTTP请求,每个请求都有0个或更多参数。 但是图像请求只有一个URL,例如http://some-image.jpg ,它似乎只是一个下载工作,没有API参数,没有授权,它很简单,但是如何构建TCP请求?

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

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

https://github.com/joshthecoder/libhttp

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

停止思考TCP。 它有自己的缓冲区,与HTTP级别的内容无关。

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

根据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  

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