如何在Robobrowser中使用代理
我正在使用http://robobrowser.readthedocs.org/en/latest/readme.html这个新的Python库,它是基于Beautiful Soup和Requests库的,正在我的Django项目中使用。我的Django应用包含:
def index(request):
p=str(request.POST.get('p', False)) # p='https://www.yahoo.com/'
pr="http://10.10.1.10:3128/"
setProxy(pr)
browser = RoboBrowser(history=True)
postedmessage = browser.open(p)
return HttpResponse(postedmessage)
我想在我的代码中添加一个代理,但在文档中找不到相关的说明。这样做可以吗?
编辑:
根据你的建议,我把代码改成了
pr="http://10.10.1.10:3128/"
setProxy(pr)
browser = RoboBrowser(history=True)
使用:
def setProxy(pr):
import os
os.environ['HTTP_PROXY'] = pr
return
现在我得到了:
Django Version: 1.6.4
Exception Type: LocationParseError
Exception Value:
Failed to parse: Failed to parse: 10.10.1.10:3128
有什么想法可以让我接下来该怎么做吗?我找不到这个错误的相关说明。
2 个回答
10
最近在RoboBrowser中进行了一些API的整理,现在有两种比较简单的方法来控制代理。首先,你可以在你的请求会话中设置代理,然后把这个会话传给你的浏览器。这样,所有通过浏览器发出的请求都会使用你设置的代理。
from requests import Session
from robobrowser import RoboBrowser
session = Session()
session.proxies = {'http': 'http://my.proxy.com/'}
browser = RoboBrowser(session=session)
第二种方法是可以针对每个请求单独设置代理。RoboBrowser的open
、follow_link
和submit_form
方法现在可以接受一些关键字参数,来传递给requests.Session.send
。比如:
browser.open('http://stackoverflow.com/', proxies={'http': 'http://your.proxy.com'})
2
因为RoboBrowser使用了请求库,你可以按照请求文档中提到的方法,设置代理。具体来说,就是设置环境变量HTTP_PROXY
和HTTPS_PROXY
。