新套接字被斜杠弄乱了?
New socket messed up by slashes?
我有一个 java 程序试图通过套接字发出 HTTP 请求。由于某种原因,字符串中的斜线把它弄乱了。
我有一个 try/catch,一旦使用带有斜杠的字符串创建套接字,它就会被捕获。
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();
我正在尝试访问主机名和带有斜杠的路径的特定站点。发生了什么事?
比 IOException
更具体,您将得到一个 UnknownHostException
(IOException
的子类),因为主机名不能包含斜杠。
您应该print/log catch 块中的异常堆栈跟踪;这个问题会更加明显。
第一个错误HTTP/1.1 400 Bad Request
是因为错误的请求路径。不知道你的代码很难找到原因。
第二个错误就像Andy Turner 已经说过的那样,因为主机名是错误的。 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");
我有一个 java 程序试图通过套接字发出 HTTP 请求。由于某种原因,字符串中的斜线把它弄乱了。
我有一个 try/catch,一旦使用带有斜杠的字符串创建套接字,它就会被捕获。
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();
我正在尝试访问主机名和带有斜杠的路径的特定站点。发生了什么事?
比 IOException
更具体,您将得到一个 UnknownHostException
(IOException
的子类),因为主机名不能包含斜杠。
您应该print/log catch 块中的异常堆栈跟踪;这个问题会更加明显。
第一个错误HTTP/1.1 400 Bad Request
是因为错误的请求路径。不知道你的代码很难找到原因。
第二个错误就像Andy Turner 已经说过的那样,因为主机名是错误的。 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");