2012-07-29 73 views
0

我試圖使用的urllib2urllib2的請求發出

req = urllib2.Request("http://1033kissfm.com", 
     headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0'}) 
response = urllib2.urlopen(req) 
rstPage = response.read() 

,打開一個頁面,響應是

<html> 
<head><title>400 Bad Request</title></head> 
<body bgcolor="white"> 
<center><h1>400 Bad Request</h1></center> 
<hr><center>nginx/1.0.3</center> 
</body> 
</html> 

,但是當我在瀏覽器中打開此URL其做工精細 這是URL

http://1033kissfm.com 

在瀏覽器中它重定向到

http://www.1033kissfm.com/pages/main 

page。

+1

這是網站特定問題,而不是python問題。該網站可能會尋找標題或其他信息,以證明您使用的是網頁瀏覽器,而不是腳本。 – 2012-07-29 10:43:58

+0

因此,您的問題對於堆棧溢出而言太過本地化;一個答案只會幫助你,而不是任何其他人,因爲它不能一概而論。 – 2012-07-29 10:45:29

+0

它的python問題,如果它的一個不好的請求,爲什麼它在網絡瀏覽器中打開? – 2012-07-29 10:47:46

回答

0

我解決了這個問題,因爲我認爲庫不提供任何處理重定向的支持。此代碼將有助於找到重定向以獲取正確的響應

def get_hops(url): 
    redirect_re = re.compile('<meta[^>]*?url=(.*?)["\']', re.IGNORECASE) 
    hops = [] 
    while url: 
      if url not in hops: 
       hops.insert(0, url) 
      response = urllib2.urlopen(url) 
      if response.geturl() != url: 
       hops.insert(0, response.geturl()) 
       # check for redirect meta tag 
      match = redirect_re.search(response.read()) 
      if match: 
       url = urlparse.urljoin(url, match.groups()[0].strip()) 
      else: 
       url = None 
    return hops