我如何使用带有纯 Java 套接字的普通 HTTP/1.1 与 nginx 通信?

How can I talk to nginx using plain HTTP/1.1 with pure Java sockets?

我通过套接字连接一个nginx http服务,我使用java 语言:

url:api.weibo.com/2/users/show.json

GET /2/users/show.json HTTP/1.1
Host: api.weibo.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: PHPSESSID=uc67dtcb5r3orchgv0dgdd0f57; think_template=default

但是return:

HTTP/1.1 400 Bad Request
Server: Weibo
Date: Sat, 24 Jan 2015 10:07:33 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Api-Server-IP: 10.75.0.174
Vary: Accept-Encoding

60
{"error":"source paramter(appkey) is missing","error_code":10006,"request":"/2/users/show.json"}
0

我不知道'60'和'0'是什么

如果我使用 HTTP/1.0 代替 HTTP/1.1,它 return:

HTTP/1.1 400 Bad Request
Server: Weibo
Date: Sat, 24 Jan 2015 10:22:09 GMT
Content-Type: application/json;charset=UTF-8
Connection: close
Api-Server-IP: 10.75.5.92
Vary: Accept-Encoding

{"error":"source paramter(appkey) is missing","error_code":10006,"request":"/2/users/show.json"}

如果我使用 socket 连接 iis 或 apache,都可以使用 HTTP/1.1

谁能告诉我为什么,以及如何解决?

网络服务returns 以块的形式发送内容,首先发送下一个块的长度。它正在使用 Chunked Transfer Encoding.

你是说你可以用 HTTP/1.1 和 GET /2/users/show.json HTTP/1.1

说话

All HTTP/1.1 applications MUST be able to receive and decode the "chunked" transfer-coding....

您可以使用 Apache HttpClient 或其他一些 Java HTTP 客户端库来避免自己实现 HTTP。