プロが教える店舗&オフィスのセキュリティ対策術

ブラウザからは接続できるのですが、HttpURLConnectionを使って接続しようとすると404が帰ってきてしまいます。URLは合っています。
接続できるようにするにはどうしたらよいですか?
以下のURLです。
http://getentry.ddbj.nig.ac.jp/search/search-e.jsp

A 回答 (2件)

このサイトはバーチャルホストを利用しているのか、HTTPリクエストにHostヘッダを指定しないと404を返すようです。


私の手元のJDK(5.0)を使って試してみましたが、問題なくデータを取得出来ましたので、JDKのバージョンの問題かもしれません。

この回答への補足

以下のように記述してみましたがだめでした。
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;
}

補足日時:2007/03/07 14:17
    • good
    • 0
この回答へのお礼

Bonjinさん
ありがとうございます!!
試してみます!!また、質問するかもしれませんがその時はまた、ご教授くださいm(_ _)m

お礼日時:2007/03/07 11:14

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/");
駄目でした・・・。

補足日時:2007/03/09 16:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!