[英]Java httpserver crashes upon receiving POST requests
I am trying to write a simple HTTP server in Java that can handle POST requests. 我正在尝试用Java编写一个可以处理POST请求的简单HTTP服务器。 While my server successfully receives the GET, it crashes on the POST.
当我的服务器成功收到GET时,它会在POST上崩溃。
Here is the server 这是服务器
public class RequestHandler {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/requests", new MyHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
String response = "hello world";
t.sendResponseHeaders(200, response.length());
System.out.println(response);
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
And here is the Java code I use to send the POST 这是我用来发送POST的Java代码
// HTTP POST request
private void sendPost() throws Exception {
String url = "http://localhost:8080/requests";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345";
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
//print result
System.out.println(response.toString());
}
Each time the POST request crashes on this line 每次POST请求在此行崩溃
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
but when I change the URL to the one provided in the example where I found this it works. 但是,当我将URL更改为示例中提供的URL时,我发现它可以正常工作。
Instead of 代替
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
Use 使用
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
You are connecting to a URL which is not HTTPS. 您正在连接到非HTTPS的URL。 When you call
obj.openConnection()
, it decides whether the connection is HTTP or HTTPS, and returns the appropriate object. 当您调用
obj.openConnection()
,它会确定连接是HTTP还是HTTPS,并返回相应的对象。 When it's http
, it won't return an HttpsURLConnection
, so you cannot convert to it. 当它是
http
,它不会返回HttpsURLConnection
,因此您无法转换为它。
However, since HttpsURLconnection
extends HttpURLConnection
, using HttpURLConnection
will work for both http
and https
URLs. 但是,由于
HttpsURLconnection
扩展了HttpURLConnection
,因此使用HttpURLConnection
将同时适用于http
和https
URL。 The methods that you are calling in your code all exist int the HttpURLConnection
class. 您在代码中调用的方法都存在于
HttpURLConnection
类中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.