2016-02-12 141 views
2

我现在学习Python,我想创建一个简单的工具来打开几个网站。我有下面的代码:Python urllib3太多重定向

#!/usr/bin/python 
import urllib3, ssl, certifi 
from urllib3 import Retry, Timeout 

def openurl(url, method = "get"): 
    retries = Retry(connect=500, read=2, redirect=500) 
    http = urllib3.PoolManager(
     cert_reqs = 'CERT_REQUIRED', 
     ca_certs = certifi.where(), 
     retries = retries 
    ) 
    con = urllib3.connection_from_url(url) 
    r = con.request(method, '/trades'); 

openurl("http://www.steamgifts.com") 

但在这个网站脚本返回Caused by ResponseError('too many redirects',)

我尝试Retry(connect=500, read=2, redirect=500)解决这个问题,但我没有看到变化。

+0

有没有可能这里有一个循环重定向? – DomTomCat

+0

@DomTomCat我的浏览器在这个网站上工作。可能存在对脚本的封锁,我是新手,我不知道如何检查它 – ventaquil

回答

2

该网站阻止了一些用户代理。你可以假装成为一个真正的网页浏览器,而不是一个鬼鬼祟祟的黑客,通过设置你自己的HTTP请求头。我对urllib3不熟悉,但使用requests非常简单。

>>> requests.get('http://www.steamgifts.com/trades') 
<Response [403]> 

>>> requests.get('http://www.steamgifts.com/trades', 
    headers={'User-Agent': 'internet explorer or something'}) 
<Response [200]> 
+0

我尝试使用:'urllib3.util.request.make_headers(user_agent =“Mozilla/5.0(Windows NT 6.1; WOW64; Trident /7.0; AS; rv:11.0)像Gecko“)'但仍然无法正常工作 – ventaquil

+1

只需使用请求模块呢?它更加用户友好。 –

+0

工作,谢谢你:) – ventaquil