[英]Java HttpURLConnection request throwing IOException with Invalid Http response
我正在使用Java 8發出POST請求,如下所示:
URL url = new URL("http://target.server.com/doIt");
URLConnection connection = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) connection;
byte[] soapBytes = soapRequest.getBytes();
httpConn.setRequestProperty("Host", "target.host.com");
httpConn.setRequestProperty("Content-Length", soapBytes.length+"");
httpConn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
httpConn.setRequestMethod("POST");
httpConn.setConnectTimeout(5000);
httpConn.setReadTimeout(35000);
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
OutputStream out = httpConn.getOutputStream();
out.write(soapBytes);
out.close();
int statusCode;
try {
statusCode = httpConn.getResponseCode();
} catch (IOException e) {
InputStream stream = httpConn.getErrorStream();
if (stream == null) {
throw e;
} else {
// this never happens
}
}
我的soap請求包含一個文檔ID,目標服務器(該主機托管我不擁有或無法訪問的第三方服務)將返回一個與提供的ID相匹配的PDF文檔。
在大多數情況下,服務器會返回PDF文檔,有時在文檔不可用時狀態碼為500。 但是,有時對getResponseCode()
的調用會引發帶有“無效的Http響應”的IOException。
我認為無論發生什么情況,服務器總是會有一些響應代碼返回。
正如AxelH指出的那樣,與遠程服務器連接時肯定出了點問題,在這種情況下,您只是無法獲得有效的響應。
如果您在測試環境中,則可以在TCP級別 (而不是HTTP級別)監視連接:在客戶端和遠程服務器之間放置一個監視器,該監視器監視兩個對等方之間交換的所有TCP通信。 如果您使用的是Eclipse,則可以創建一個TCP監視器 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.