我得到了一些图像使用HTTP下载。 我得到了这些图片URL,如何构建基于TCP的HTTP缓存下载的图片?
我在我的当前平台没有图书馆,在这个平台上唯一支持的语言是C,所以我必须建立对这些资源的HTTP缓存。
目前,我有建立正常的API请求,他们都是HTTP请求,每次请求有0或多个参数。 但图像请求只拿到了一个网址,如http://some-image.jpg,这似乎只是一个下载工作,没有API的参数,没有授权,这很简单,但如何构建TCP请求?
我得到了一些图像使用HTTP下载。 我得到了这些图片URL,如何构建基于TCP的HTTP缓存下载的图片?
我在我的当前平台没有图书馆,在这个平台上唯一支持的语言是C,所以我必须建立对这些资源的HTTP缓存。
目前,我有建立正常的API请求,他们都是HTTP请求,每次请求有0或多个参数。 但图像请求只拿到了一个网址,如http://some-image.jpg,这似乎只是一个下载工作,没有API的参数,没有授权,这很简单,但如何构建TCP请求?
你将不得不实现HTTP协议或它的一个子集。 有开源实现。 例如:
https://github.com/bagder/curl/tree/master/lib
https://github.com/joshthecoder/libhttp
如何构建基于TCP的HTTP缓存下载的图片?
停止思考TCP。 它里面什么都没有做什么happenning在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
<binary image data>
我从Chrome中下载的图像,它的大小是一样的Content-Length: 42299
,我觉得我得到的图像缓冲器。