2013-06-06 12 views
5

yönlendirir. Bir tcp bağlantısı kurarak ve yazıcı yazarı kullanarak GET isteğini el ile gönderiyorum.GET isteğini bir web sitesine manuel olarak gönderme. 302 Şu anda java kullanarak bir web kazıyıcı üzerinde çalışıyorum hata

Böyle yahoo.com veya cracked.com ve bir yanıt almak gibi en web sitelerine bağlantı kurabiliyorum, AMA benim hedef web sitesine bağlanamıyorum - vinylengine.com. Her zaman bir 302 hatası döndürür.

benim tarayıcı en benim gönderme isteği karşılaştırıldı ve onlar neredeyse aynıdır.

üstbilgim:

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

My Tepki:

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> 

Tarayıcının başlık:

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" 

Kodu:

+1

HTTP 302 yeniden yönlendirme anlamına gelir, böylece yeniden yönlendirilmiş URL'yi yeniden çağırmanız gerekir – nidhin

+0

Tarayıcıyla aynı şeyi yapmıyorsunuz, sonuçların neden farklı olduğunu merak ediyor musunuz? –

cevap

6

bakın. Eğer tarayıcı olarak "neredeyse aynı şeyi" yaptığını dediğimizde

... haklısın. Ve bilgisayarlar böyle şeyler hakkında çok seçici. Bir User-Agent: başlık kaynağı yoksa

Eğer bir yönlendirme olsun.

> telnet www.vinylengine.com 80
vinylengine.com için 67.225.154.112 ...
Bağlı çalışılıyor.
Kaçış karakteri '^]' dir.
GET/HTTP/1.1
Host: www.vinylengine.com
Kabul: */*

HTTP/1.1 302
Bulunan ...

> telnet www.vinylengine.com 80
vinylengine.com bağlantılı 67.225.154.112 ...
çalışılıyor: bir tane sağlamalısınız yoksa

Oysa, sayfayı olsun.
Kaçış karakteri '^]' dir.
GET/HTTP/1.1
Host: www.vinylengine.com
User-Agent:/7.21.4 (evrensel-elma-darwin11.0) bukle libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2. 5
Kabul: */*

HTTP/1.1 200
... (sayfa) Tamam site farklı tarayıcılara içeriklerinin farklı versiyonlarını sağlıyor çünkü

Bu genellikle yapılır User-Agent başlığı tarafından belirlendiği şekilde. Görünüşe göre "Kullanıcı Aracısı yok" cevabı ... ... punt, ve ana site köküne yönlendiriliyorsunuz.

+0

+1 Tam olarak bulmam (aynı zLib sürümüne kadar) :). –

+0

Teşekkürler, bu sorunu çözdü! –

1

Bu

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; 
    } 
} 

Ben nakedresource.com için ana bilgisayar adını değiştirmeyi denedi, ama bunu yaparken, ben nakedresource.com için sayfa kaynağını almak ve vinylengine.com değil tarayıcınızda proxy'nizi yapılandırdığınızda mümkün olabilir, ancak JVM'iniz bunun farkında değildir.

deneyin aşağıdaki argümanlar ile JVM başlatmak ve sorunun çözülüp çözülmediğini görmek için:

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

Sorun şu ki, sorun sitenin bir User Agent dizesi aradığıdır. –

3
HttpURLConnection.setFollowRedirects(true); 

Eğer HttpURLConnection yukarıdaki kodu kullanabilirsiniz kullanıyorsanız.

Ayrıca söz konusu site (sizin durumunuzda bunun Veya eksikliği) kullanıcı aracısı dizesi bakıyor Example showing HTTP redirects

+2

Sadece bir FYI, yönlendirme hiçbir "Kullanıcı-Aracı" dizgisi nedeniyle. Daha sonra, söz konusu gerçek sayfadan ziyade farklı bir (ana) siteye götürür. –

+0

Bir kullanıcı aracısı dizesinin nasıl ekleneceğini öğrenmek için her zaman http://stackoverflow.com/questions/2529682/setting-user-agent-of-a-java-urlconnection adresine bakabilirsiniz. – user1889970

İlgili konular