我必须从服务器获取响应代码吗?
问题描述:
我有以下代码我必须从服务器获取响应代码吗?
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");
}
考虑到该代码,在它的全部,因为它是导致java.net.ProtocolException
,是有办法还是抢服务器响应并执行conn.getOutputStream();
?按什么顺序?除了明显的报告问题之外,没有获得回应的后果是什么?
答
问题是,一旦你得到响应码,你就发送了你的帖子。在您的代码中,在获得响应之前,您不会向输出流写入任何内容。所以,你基本上什么都不发送(只是这个头文件信息),得到响应代码,然后再次尝试写入,这是不允许的。你需要做的是写入到输出流,然后再获得响应代码如下所示:
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");
}
}
这里有一个小教程:
谢谢你的回答和教程 – Mushy