0

我有以下代码

URL url = new URL(pushURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/restService");
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
if(conn.getResponseCode() == 200){
    logger.debug("Success");
} else {                 
    logger.debug("Time out set for 30 seconds");
} 
String input = writer.getBuffer().toString();
OutputStream os = conn.getOutputStream();

如果我对服务器的响应不感兴趣,我可以删除以下代码吗?

 if(conn.getResponseCode() == 200){
    logger.debug("Success");
} else {                 
    logger.debug("Time out set for 30 seconds");
} 

考虑到代码,就其本身而言,会导致 a java.net.ProtocolException,有没有办法仍然获取服务器响应并执行conn.getOutputStream();?以什么顺序?除了明显的报告问题之外,没有得到回应的后果是什么?

4

1 回答 1

2

问题是,一旦您获得响应代码,您就已经发送了您的帖子。在您的代码中,您不会在收到响应之前向输出流写入任何内容。因此,您实际上并没有通过帖子发送任何内容(只是该标题信息),获取响应代码,然后尝试再次写入它,这是不允许的。您需要做的是先写入输出流,然后获取响应代码,如下所示:

public static void main(String[] args) throws IOException {
    URL url = new URL(pushURL);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/restService");
    conn.setConnectTimeout(30000);
    conn.setReadTimeout(30000);
    String input = writer.getBuffer().toString();
    OutputStream os = conn.getOutputStream();
    for (char c : input.toCharArray()) {
        os.write(c);
    }
    os.close();

    if(conn.getResponseCode() == 200){
        System.out.println("Success");
    } else {                 
        System.out.println("Time out set for 30 seconds");
    } 
}

这是一个小教程:

阅读和写作教程

于 2016-12-01T17:42:36.300 回答