- ベストアンサー
HttpURLConnectionで接続できないサイト
ブラウザからは接続できるのですが、HttpURLConnectionを使って接続しようとすると404が帰ってきてしまいます。URLは合っています。 接続できるようにするにはどうしたらよいですか? 以下のURLです。 http://getentry.ddbj.nig.ac.jp/search/search-e.jsp
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
このサイトはバーチャルホストを利用しているのか、HTTPリクエストにHostヘッダを指定しないと404を返すようです。 私の手元のJDK(5.0)を使って試してみましたが、問題なくデータを取得出来ましたので、JDKのバージョンの問題かもしれません。
その他の回答 (1)
- PED02744
- ベストアンサー率40% (157/390)
回答No.2
ANo.1さん、横槍失礼します。 HOSTヘッダといったら、HOSTヘッダです。 [HOST: http://hostname/] とかいうやつです。 HTTP/1.1仕様から必須です。 http://www.studyinghttp.net/header これを参照の事。
質問者
補足
PED02744さんありがとうございます。 下記の様にやったのですが、 urlcon.setRequestProperty("Host", "http://getentry.ddbj.nig.ac.jp/"); 駄目でした・・・。
お礼
Bonjinさん ありがとうございます!! 試してみます!!また、質問するかもしれませんがその時はまた、ご教授くださいm(_ _)m
補足
以下のように記述してみましたがだめでした。 HOSTヘッダの指定というのはこのような事ではないという事でしょうか? /** * URLにアクセスするメソッド * * @param searchURL アクセスするURL * @return アクセスし、取得したHTMLの文字列 */ public String accessURL(String searchURL) { System.out.println(CLASS_NAME + ".public String accessURL(String " + searchURL + ")"); BufferedInputStream input = null; String result = ""; try { URL url; HttpURLConnection urlcon; //PROXYが""の時はPROXY無しでアクセス if(PropertyLoader.PROXY.equals("")) { url = new URL(searchURL); } else //PROXYが設定されている時はPROXYを使ってアクセス { url = new URL("http", PropertyLoader.PROXY, PropertyLoader.PORT ,searchURL); } //urlコネクションをオープンする urlcon = (HttpURLConnection)url.openConnection(); urlcon.setDoOutput(true); urlcon.setAllowUserInteraction(true); urlcon.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); if(urlcon.getResponseCode() >= 500) { return ""; } //BufferedInputStreamのインスタンス化 input = new BufferedInputStream(urlcon.getInputStream()); try { int arraySize = 4096; byte[] buffer = new byte[arraySize]; int v = 0; int count = 0; //バイトデータが送られてくる間ループを実行 while((v = input.read(buffer, count, 1024)) != -1) { count += v; if(count >= (buffer.length - 1024)) { byte[] newb = new byte[count * 2]; System.arraycopy(buffer, 0, newb, 0, buffer.length); buffer = newb; } } result= new String(buffer, 0, count, "EUC_JP"); } catch(OutOfMemoryError e) { return ""; } } catch(IOException e) { return ""; } catch (Exception e) { return ""; } finally { try { if(input != null) { //inputのクローズ input.close(); } } catch(IOException e) { e.printStackTrace(); } } return result; }