テスト中に、特定の Web サイトが HTTP 406 エラー コードを取得しようとしたときに「受け入れられません」というエラー コードを返していることがわかりました。URL はhttp://thelastword.msnbc.msn.com/_news/2012/06/07/12109716-awesome-internets-thursday-editionです。
これが私のコードです(通常のブラウザリクエストのように見えるようにできる限りのことをしようとしています):
sourceURL = new URL("http://thelastword.msnbc.msn.com/_news/2012/06/07/12109716-awesome-internets-thursday-edition");
final HttpURLConnection connection = (HttpURLConnection) sourceURL.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/rss+xml");
connection.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8");
connection.setRequestProperty("Accept-Language", "en-US,en");
connection.setRequestProperty("Accept-Encoding", "gzip");
connection
.setRequestProperty("User-Agent",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21");
connection.setRequestProperty("Host",
sourceURL.getHost() + (sourceURL.getPort() != -1 ? ":" + sourceURL.getPort() : ""));
System.out.println("Response code: "+connection.getResponseCode());
この Web サーバーがこのエラーで戻ってくるのはなぜですか? どうやら Web サーバーは Apache 2.2.16 です。
編集:この行をコメントアウトすると、これが機能するようです:
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/rss+xml");
しかし、なぜ?