[英]Java Sockets: HTTP/1.1 505 HTTP Version Not Supported
我正在创建一个简单的HTTP客户端。 我从此处跟踪了一个代码示例,该示例适用于除www.httbin.org之外的许多站点。 当我尝试www.httbin.org时 ,出现以下错误:
HTTP/1.1 505 HTTP Version Not Supported
Connection: close
Server: Cowboy
Date: Fri, 28 Sep 2018 16:28:50 GMT
Content-Length: 0
我看了其他的答案,但没有帮助。
这是我的测试代码:
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException {
//Connection details
InetAddress address = InetAddress.getByName("www.httpbin.org");
Socket mySocket = new Socket(address, 80);
//Streams
PrintWriter mySocketOutput = new PrintWriter(mySocket.getOutputStream(), true);
InputStreamReader inputStreamReader = new InputStreamReader(mySocket.getInputStream());
//Headers
mySocketOutput.println("GET / HTTP/1.0");
mySocketOutput.println("Host: www.httpbin.org");
mySocketOutput.println("Connection: close");
mySocketOutput.println();
boolean loop = true;
StringBuilder stringBuilder = new StringBuilder();
//reading results from server
while (loop) {
if(inputStreamReader.ready()) {
int currentChar = 0;
while (currentChar != -1) {
currentChar = inputStreamReader.read();
stringBuilder.append((char) currentChar);
}
loop = false;
}
}
//print result
System.out.println(stringBuilder.toString());
mySocket.close();
}
}
虽然您的请求看起来与HTTP相似,但事实并非如此。 根据标准,以HTTP结尾的行是\\r\\n
而不是像println
那样简单的\\n
。 如果在所有地方都使用适当的结尾行(即,对于具有内容的每一行,也对于结尾为请求标头的“空”行),它也可以与www.httpbin.org
一起www.httpbin.org
。
不支持HTTP / 1.1 505 HTTP版本
为什么来自服务器的这个令人困惑的答案? 由于您的请求在HTTP标头和(空)HTTP主体之间没有适当的分隔符,因此假定它是HTTP 0.9请求。 长久的过时的HTTP 0.9协议不需要仅由\\r\\n
组成的空行作为请求标头结尾,因为在HTTP 0.9中首先没有标头和正文之类的内容。
我正在创建一个简单的HTTP客户端。
请不要低估编写适当的HTTP客户端的复杂性。 例如,您作为自己的客户端基础引用的代码不仅为请求使用了错误的行尾,而且还声称支持HTTP / 1.1,而无法处理主体的分块传输编码。
如果您真的想学习协议,也许您也应该跳过该网站上的其他代码。 至少瘦SMTP客户端也使用损坏的协议实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.