繁体   English   中英

Java套接字:不支持HTTP / 1.1 505 HTTP版本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM