2012-07-29 5 views
0
내가 urllib2가

urllib2가 요청 문제

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 

페이지

+1

이것은 웹 사이트 관련 문제이며 파이썬 문제는 아닙니다. 이 사이트는 아마도 스크립트가 아닌 웹 브라우저를 사용하고 있다는 증거로 헤더 또는 기타 정보를 찾습니다. –

+0

이와 같이 스택 오버플로에 대한 질문이 너무 현지화되어 있습니다. 대답은 일반화 될 수 없으므로 다른 사람이 아니라 오직 당신을 도울 것입니다. –

+0

파이썬 문제가 나쁜 요청 인 경우 웹 브라우저에서 열리는 이유는 무엇입니까? –

답변

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