2012-10-04 65 views
1

我用下面的代碼來發送GET請求,然後接收響應:獲取有關HttpURLConnection的HTTP 415錯誤連接

try { 
    URL url = new URL(strurl); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

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

    con.connect(); 

    BufferedReader is = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String line; 
    String vAnswerStr=""; 
    String lineSeparator = System.getProperty("line.separator"); 

    while ((line = is.readLine()) != null) { 
     vAnswerStr = vAnswerStr + line + lineSeparator; 
    } 
    is.close(); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 

strurl是水木清華這樣的,雖然我不認爲這是格式可能是

https://somesite.ru/?arg1=val1&arg2=val2

預期輸出是XML,平穩這樣的:與所述連接問題:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
<tag1>00000</tag1> 
<tag2>0</tag2> 
    ... 
</response> 

5次嘗試10次。

其他5次試圖返回:

產生java.io.IOException:服務器返回的HTTP響應代碼:415網址:https://somesite.ru/?arg1=val1&arg2=val2

在 sun.net.www.protocol.http.HttpURLConnection。的getInputStream(HttpURLConnection.java:1615) 在 sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)

我讀過關於HTTP 415錯誤的幾篇文章。但他們似乎沒有幫助。我已經嘗試過不同的請求屬性,但是找不到那個請求屬性,或者情況並非如此。

的IDE是NetBeans的7.0

誰能給我正確的方向來解決這個問題?

編輯

忘了說,從瀏覽器中做同樣的請求時,它工作在嘗試的100%。

+0

什麼是'Expect'頭的目的是什麼?似乎不是一個標準的http請求頭,btw'Content-Type'是一個響應頭,在請求頭列表中使用它的任何原因? – Vikdor

+0

@Vikdor正在嘗試...之前發現一些職位,建議此.. – horgh

+0

編輯的問題,刪除不正確的標題 – horgh

回答

2

幾件事情你應該檢查:

  1. 如果你有機會到服務器,它是記錄什麼?
  2. 目標支持哪些內容類型?您應該指定內容類型,以便遠程服務器知道您要發送的內容:

    con.setRequestProperty(「Content-Type」,「text/html; charset = utf-8」);

  3. 您可能需要您的文本編碼 - 看Java的URLEncoder的

+0

最後問題是在服務器上。雖然提供者與我們交流的服務器拒絕解釋它的本質,但在java應用程序中沒有任何事情要做。所以,我從這篇文章中得到的最接近的想法是你的觀點1.無論如何,謝謝! – horgh

+0

我有同樣的錯誤(415),我想添加第四點,以防有些沮喪的程序員碰到這篇文章:(4)檢查服務器的'web.xml'文件。您可能已經爲JSON/xml功能添加了庫(例如Jackson),但您忘記設置依賴關係。這也可能導致415錯誤。 – Mario