2013-06-06 23 views
5

私は現在、Javaを使用しているWebスクレーパーで作業しています。私は手動でGET要求を送信するtcp接続を設定し、printerwriterを使用しています。GETリクエストをWebサイトに手動で送信します。 302リダイレクトエラー

私はyahoo.comやcracked.comなどのほとんどのウェブサイトに接続して回答を受け取ることができますが、ターゲットウェブサイト - vinylengine.comに接続できません。常に302エラーが返されます。

私は自分の送信要求を私のブラウザと比較しており、それらはほぼ同じです。

マイヘッダ:

GET/HTTP/1.1 
Host: www.vinylengine.com 

私の応答:

HTTP/1.1 302 Found 
Date: Thu, 06 Jun 2013 19:27:00 GMT 
Server: Apache 
Location: http://www.nakedresource.com/ 
Cache-Control: max-age=1209600 
Expires: Thu, 20 Jun 2013 19:27:00 GMT 
Content-Length: 213 
Content-Type: text/html; charset=iso-8859-1 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>302 Found</title> 
</head><body> 
<h1>Found</h1> 
<p>The document has moved <a href="http://www.nakedresource.com/">here</a>.</p> 
</body></html> 

ブラウザのヘッダー:

GET http://www.vinylengine.com/ HTTP/1.1 
Host: www.vinylengine.com 
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Cookie: __utma=72407316.18415374.1370488314.1370497873.1370543389.3; __utmz=72407316.1370488314.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); SESSaf8d12283bdbdc5f5bbfb2aef054db6d=1f0676e5cab0ba2c5a80e76ea0bd6f75; __utmc=72407316; has_js=1; __utmb=72407316 
Connection: keep-alive 
If-Modified-Since: Thu, 06 Jun 2013 18:02:53 GMT 
If-None-Match: "2186d59ac297e0f1a43433fa61e8a94b" 

コード:

public void sendRequest(String extensionString, String urlString) 
{ 
    try 
    { 
     //BufferedReader inFromServer; 
     //PrintWriter outToServer; 
     //These 2 are initalized elsewhere 

     outToServer.println("GET " + extensionString + " HTTP/1.1"); 
     outToServer.println("Host: " + urlString); 

     outToServer.println(""); 
     outToServer.flush(); 

     String temp; 
     while((temp=inFromServer.readLine()) != null) 
     { 
      System.out.println(temp); 
     } 

     return; 
    } 
    catch (Exception e) 
    { 
     System.out.printf("sendRequest failed: %s",e); 
     return; 
    } 
} 

私はnakedresource.comにホスト名を変更しようとしているが、私はそれを行うとき、私はnakedresource.comのためのページのソースを取得し、

+1

HTTP 302はリダイレクトを意味するので、リダイレクトされたURLを再度呼び出す必要があります – nidhin

+0

したがって、ブラウザと同じことをやっていないのですが、なぜ結果が異なるのだろうか? –

答えて

6

を参照してください。

あなたがブラウザと「ほぼ同じこと」をしていると言うと...そうです。そして、コンピュータはそんなことについてちょっと嫌だ。

User-Agent:ヘッダーを指定しないと、リダイレクトされます。

> vinylengine.comに接続67.225.154.112 ...
をしようとtelnetのwww.vinylengine.com 80

エスケープ文字は '^]'です。
GET/HTTP/1.1
ホスト:www.vinylengine.com
受け入れ:*/*

HTTP/1.1 302は
を発見...

使用すると、1つを提供された場合のに対して、あなたはページを取得:67.225.154.112 ... vinylengine.comに接続
をしようと

>のtelnet www.vinylengine.com 80

エスケープ文字は '^]'です。
GET/HTTP/1.1
ホスト:www.vinylengine.com
のUser-Agent:カール/ 7.21.4(ユニバーサル・りんご・darwin11.0)のlibcurl/7.21.4のOpenSSL/0.9.8rのzlib/1.2。 5
受け入れ:*/*

HTTP/1.1 200 OK
...(ページ)

をサイトには、異なるブラウザへのコンテンツの異なるバージョンを提供しているので、これは通常行われていますUser-Agentヘッダによって決定される。どうやら、 "no User-Agent"に対する答えは... puntで、あなたは親サイトルートにリダイレクトされます。

+0

+1正確に私の所見(同じzLibバージョンまで): –

+0

これは問題を解決してくれてありがとう! –

1

これをvinylengine.comありませんブラウザでプロキシを設定しているのにJVMがそのプロキシを認識していない場合には可能です。

は、次の引数を使用してJVMを起動し、それが問題を修正かどうかを確認してください:

-Dhttp.proxyHost=10.12.11.1 -Dhttp.proxyPort=8800 
+0

問題は、サイトがユーザーエージェント文字列を探すということです。 –

3
HttpURLConnection.setFollowRedirects(true); 

あなたはHttpURLConnectionは、上記のコードを使用して使用している場合。

はまた、問題のサイトは、(あなたのケースでまたはその欠如)ユーザーエージェント文字列を見ている Example showing HTTP redirects

+2

ちょうどFYI、リダイレクトは 'User-Agent'文字列のせいではありません。次に、実際のページではなく、別の(親の)サイトに移動します。 –

+0

ユーザエージェント文字列を追加する方法については、いつでもhttp://stackoverflow.com/questions/2529682/setting-user-agent-of-a-java-urlconnectionを参照することができます。 – user1889970

関連する問題