如何在Robobrowser中使用代理

4 投票
2 回答
2189 浏览
提问于 2025-04-18 09:31

我正在使用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的openfollow_linksubmit_form方法现在可以接受一些关键字参数,来传递给requests.Session.send。比如:

browser.open('http://stackoverflow.com/', proxies={'http': 'http://your.proxy.com'})
2

因为RoboBrowser使用了请求库,你可以按照请求文档中提到的方法,设置代理。具体来说,就是设置环境变量HTTP_PROXYHTTPS_PROXY

撰写回答