gpt4 book ai didi

java - 为什么我在通过 TCP 套接字发送手动创建的 HTTP 请求时收到 HTTP 400 错误请求响应?

转载 作者:可可西里 更新时间:2023-11-01 16:11:13 24 4
gpt4 key购买 nike

我正在尝试手动构建 HTTP 请求(作为字符串)并通过 TCP 套接字发送它,这就是我正在尝试做的事情:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* SimpleHttpClient.java (UTF-8)
*
* Mar 27, 2014
*
* @author tarrsalah.org
*/
public class SimpleHttpClient {
private static final String StackOverflow = "http://stackoverflow.com/";

public static void main(String[] args) {

// if (args.length < 1) {
// System.out.println("Usage : SimpleHttpClient <url>");
// return;
// }

try {
URL url = new URL(StackOverflow);
String host = url.getHost();
String path = url.getPath();
int port = url.getPort();
if (port < 80) {
port = 80;
}

//Construct and send the HTTP request
String request = "GET" + path + "HTTP/1.1\n";
request += "host: " + host;
request += "\n\n";

// Open a TCP connection
Socket socket = new Socket(host, port);
// Send the request over the socket
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print(request);
writer.flush();
// Read the response
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String next_record = null;
while ((next_record = reader.readLine()) != null) {
System.out.println(next_record);
}
socket.close();
} catch (MalformedURLException ex) {
Logger.getLogger(SimpleHttpClient.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(SimpleHttpClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

但无论选择 URL,我都会收到此响应消息:

HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html

<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>

为什么?

最佳答案

感谢Julian Reschke对于这个建议,我缺少两个空格字符(一个在 HTTP 动词之后,第二个在路径之后)

String request = "GET " + path + " HTTP/1.1\n";
// ^ ^

关于java - 为什么我在通过 TCP 套接字发送手动创建的 HTTP 请求时收到 HTTP 400 错误请求响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com