![](/img/trans.png)
[英]Getting error “java.io.IOException: Server returned HTTP response code: 406”, when calling servlet method
[英]Getting HTTP 406 while calling external site from within servlet
我的servlet中包含以下代碼:
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
public void doIt(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
URL url = new URL("http://some.url.that.works.well.nl/q=hello&ie=nl&cx=hdyehgfyegywjehdkwed:7364du7");
URLConnection conn = url.openConnection();
conn.connect();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream())); // This line is generating the error
String line = "";
PrintWriter pw = response.getWriter();
while((line = br.readLine()) != null) {
pw.println(line);
}
}
在tomcat中運行此servlet給我一個http 406錯誤。
我想做的是從我的servlet調用Google網站搜索中進行的,我想解析接收到的(XML)結果。 (目前,我只打印接收到的結果)。 在瀏覽器中嘗試該URL可以給出正確的結果。
我在這里想念什么?
親切的問候,沃納
406 HTTP錯誤表示服務器無法使用可接受的內容類型構建對您請求的響應。 這意味着您的URLConnection
向服務器詢問給定的內容類型,而服務器找不到合適的內容類型。
您可以使用setRequestProperty(String, String)
方法更改URLConnection
請求的內容類型。 您將必須添加以下內容:
conn.setRequestProperty("accept", "text/xml");
(這假設服務器將XML發送回給您)
我解決了問題。
我用wireshark研究了通過電線發送的內容。
我的網址包含一個空格,這引起了所有問題。
如前所述,我想聯系google搜索,我的網址看起來像:
http://www.google.com/search?q=golden handpressure&ie=8758438&cx=hjfweufhweufwef:9e
這在瀏覽器地址欄中起作用,但在Java中不起作用。
通過wireshark,我發現我的請求標頭包含:
Request URI: http://www.google.com/search?q=golden
Request version: handpressure&ie=8758438&cx=hjfweufhweufwef:9e
這當然是不正確的。 它應該全部是一個稱為“請求URI”的字段。
將空格更改為'%20'解決了該問題。
檢查服務器上的Content-Type響應頭。 它應該返回:
Content-Type:text/xml; charset=UTF-8
charset = UTF-8應該在響應中。 如果沒有,則將其添加到標頭中(如果服務器在您的控制范圍內)。
我認為這與“接受標頭”有關。 您可以檢查交換的接受標頭嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.