1

サーブレットに次のコードがあります。

/**
 * @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 で実行すると、http 406 エラーが発生します。

私がやろうとしているのは、サーブレット内から Google サイト検索を呼び出すことです。受信した (XML) 結果を解析したいと思います。(今のところ、受信した結果を印刷するだけです)。ブラウザで URL を試すと、正しい結果が得られます。

ここで何が欠けていますか?

よろしく、ヴェルナー

4

4 に答える 4

4

406 HTTP エラーは、サーバーが要求に対する応答を受け入れ可能なコンテンツ タイプで構築できなかったことを意味します。これはURLConnection、指定されたコンテンツ タイプをサーバーに要求し、サーバーが適切なコンテンツ タイプを見つけられないことを意味します。

メソッドURLConnectionを使用して、要求されたコンテンツ タイプを変更できます。setRequestProperty(String, String)次のようなものを追加する必要があります。

conn.setRequestProperty("accept", "text/xml");

(これは、サーバーが XML を送り返すことを前提としています)

于 2011-05-19T08:47:16.197 に答える
3

私は問題を解決しました。
私はwiresharkを使用して、ネットワークを介して送信されたものを調査しました。
私のURLにはスペースが含まれていて、それがすべての問題を引き起こしていました。

前に言ったように、私はグーグル検索に連絡したいと思っていました、そして私のURLは次のようになりました:

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」と呼ばれる1つのフィールドである必要があります。
スペースを「%20」に変更すると、問題が解決しました。

于 2011-05-19T17:58:34.833 に答える
0

サーバーの Content-Type 応答ヘッダーを確認してください。返されるはずです:

Content-Type:text/xml; charset=UTF-8

charset=UTF-8 が応答にあるはずです。サーバーがあなたの管理下にある場合は、ヘッダーに追加しないでください。

于 2014-08-24T12:59:11.993 に答える
0

Acceptヘッダーと関係があると思います。交換された受け入れヘッダーを確認できますか。

于 2011-05-19T08:46:35.077 に答える