【问题标题】:How to use proxy with Robobrowser如何在 Robobrowser 中使用代理
【发布时间】:2014-06-12 05:46:20
【问题描述】:

我正在使用 django 中的http://robobrowser.readthedocs.org/en/latest/readme.html(一个基于漂亮的汤和请求库的新 python 库)。我的 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

对下一步做什么有任何想法吗?我找不到这个错误的参考

【问题讨论】:

    标签: python django


    【解决方案1】:

    在 RoboBrowser 中最近进行了一些 API 清理之后,现在有两种相对简单的方法来控制代理。首先,您可以在请求会话中配置代理,然后将该会话传递给您的浏览器。这会将您的代理应用于通过浏览器发出的所有请求。

    from requests import Session
    from robobrowser import RoboBrowser
    
    session = Session()
    session.proxies = {'http': 'http://my.proxy.com/'}
    browser = RoboBrowser(session=session)
    

    其次,您可以根据每个请求设置代理。 RoboBrowseropenfollow_linksubmit_form 方法现在接受 requests.Session.send 的关键字参数。例如:

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

    【讨论】:

    • 谢谢你,非常感谢 - 比尔
    • 我刚刚意识到 robobrowser 是您的项目。感谢您创建它! - 比尔
    • 顺便说一句,如果你有第二个问题,我有一个新问题stackoverflow.com/questions/25067874/…
    【解决方案2】:

    由于 RoboBrowser 使用请求库,您可以尝试通过设置环境变量 HTTP_PROXYHTTPS_PROXY 来设置 request docs 中提到的代理。

    【讨论】:

    • 尝试使用“10.10.1.10:3128”作为代理值或“user:pass@10.10.1.10:3128
    • 原来我在代理字符串的末尾多了几个字符。当我删除它们时,它开始使用 pr="10.10.1.10:3128" 工作。非常感谢您的帮助。 - 比尔
    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2014-06-18
    • 2017-12-15
    • 2014-06-15
    • 2018-08-18
    • 1970-01-01
    • 2014-07-07
    • 2017-04-10
    相关资源
    最近更新 更多