Java不发送HTTP POST请求(Java doesn't send HTTP POST

2019-10-28 19:22发布

我为了发送实施一些简单的Java类HTTP与请求POST方法,并同时另一个Java类,以获得它。
服务器工作正常,当我做一个POST通过我的浏览器(Chrome),或应用程序的方式请求(我已经在这种情况下使用邮差),但它有问题,当我发送结束HTTP请求用java!

我发送HTTP类是“Sender.java”,包含下面的代码片段:

String url = "http://localhost:8082/";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

// Setting basic post request
con.setRequestMethod("POST");       
//con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
//con.setRequestProperty("Content-Type","text/plain");

// Send post request
con.setDoOutput(true);
OutputStream os = con.getOutputStream();
os.write("Just Some Text".getBytes("UTF-8"));
os.flush();
os.close();
//connect to the Server(resides at Server.java)
con.connect();

我评论的代码设置,如“接受语言”和“内容类型”因为我不知道是否需要这些标题的java程序制定出做头几行?

该服务器被命名为“Server.java”另一个Java程序。 下面是与读取片断HTTP由Sender.java提出请求(如果需要的话)。

int servPort = 8082;
// Create a server socket to accept HTTP client connection requests
HttpServer server = HttpServer.create(new InetSocketAddress(servPort), 0);
System.out.println("server started at " + servPort);

server.createContext("/", new PostHandler());//PostHandler implements HttpHandler
server.setExecutor(null);

server.start();

我想要的是发送明文作为我的身体HTTP与请求Post法。 我已经在这个网站阅读大量的网站,甚至相关的问题的。 但它仍然不工作了。 换句话说,每当我创建一个HTTP从“Sender.java”请求,没有出现在“Server.java”。 我只是想知道有什么错我的片段,我应该如何解决呢?

Answer 1:

我测试了这一点,它的工作:

//Sender.java
String url = "http://localhost:8082/";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();


con.setRequestMethod("POST");       
con.setDoOutput(true);

OutputStream os = con.getOutputStream();
os.write("Just Some Text".getBytes("UTF-8"));
os.flush();

int httpResult = con.getResponseCode(); 
con.disconnect();

正如你所看到的, 连接是没有必要的。 关键线路

INT httpResult = con.getResponseCode();



Answer 2:

也许“localhost”的发件人地址不解析服务器绑定到同一个IP? 请尝试更改为127.0.0.1或者你的实际IP地址。



Answer 3:

尝试为PrintStream

        String url = "http://localhost:8082/";
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // Setting basic post request
        con.setRequestMethod("POST");       
        //con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        //con.setRequestProperty("Content-Type","text/plain");

        // Send post request
        con.setDoOutput(true);
        OutputStream os = con.getOutputStream();
        java.io.PrintStream printStream = new java.io.PrintStream(os);
        printStream.println("Just Some Text");
        con.getInputStream();//Send request
        os.flush();
        os.close();


Answer 4:

当你使用浏览器发送POST形式,它发送特定格式的表格,在规定RFC1866 ,你必须作出一个POST请求时,重新创建了Java。

使用此格式,它的重要的是你设置的Content-Typeapplication/x-www-form-urlencoded ,并通过身体,你会在一个GET请求的URL做。

借用我以前的答案POST在Java中的一些代码:

URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

// Setting basic post request
con.setRequestMethod("POST");    

Map<String,String> form = new HashMap<>();

// Define the fields
form.put("username", "root");
form.put("password", "sjh76HSn!"); // This is a fake password obviously

// Build the body
StringJoiner sj = new StringJoiner("&");
for(Map.Entry<String,String> entry : arguments.entrySet())
    sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" 
         + URLEncoder.encode(entry.getValue(), "UTF-8"));
byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8);
int length = out.length;

// Prepare our `con` object
con.setFixedLengthStreamingMode(length);
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
con.connect();
try (OutputStream os = con.getOutputStream()) {
    os.write(out);
}


文章来源: Java doesn't send HTTP POST Request
标签: java http post