有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java新socket被斜杠弄乱了?

我有一个java程序试图通过socket发出HTTP请求。不知什么原因,字符串中的斜杠把它弄乱了

我有一个try/catch,一旦用斜杠创建socket,它就会被捕获

        Socket socket = new Socket("www.google.ca", port);

回应

HTTP/1.1 400 Bad Request
Content-Length: 54
Content-Type: text/html; charset=UTF-8
Date: Fri, 14 Oct 2016 06:05:43 GMT
Connection: close

<html><title>Error 400 (Bad Request)!!1</title></html>

现在用斜杠

        Socket socket = new Socket("www.google.ca/", port);

被抓住了

我的要求

            outputStream.println("GET / HTTP/1.1");
            outputStream.println("");
            outputStream.flush();

我正在尝试使用带有斜杠的主机名和路径访问特定站点。发生了什么事


共 (2) 个答案

  1. # 1 楼答案

    IOException更具体地说,您将得到一个UnknownHostException(一个IOException的子类),因为主机名不能包含斜杠

    您应该在catch块中打印/记录异常的堆栈跟踪;这个问题会更加明显

  2. # 2 楼答案

    第一个错误HTTP/1.1 400 Bad Request是因为请求路径错误。在不知道代码的情况下很难找到原因

    第二个错误就像安迪·特纳已经说过的那样,因为主持人的名字错了InetAddress无法用斜杠解析主机名

    这个例子对我很有用:

    public static void main(String[] args) throws Exception {
        Socket s = new Socket(InetAddress.getByName("google.com"), 80);
        PrintWriter pw = new PrintWriter(s.getOutputStream());
        pw.println("GET /about/ HTTP/1.1"); // here comes the path
        pw.println("f-Modified-Since: Wed, 1 Oct 2017 07:00:00 GMT");
        pw.println("");
        pw.flush();
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line;
        while((line = br.readLine()) != null){
            System.out.println(line);
        }
        br.close();
    }
    

    您只需在这行中设置路径:

    pw.println("GET /about HTTP/1.1");