![](/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.