2014-06-12 29 views
3

我正在與django中的http://robobrowser.readthedocs.org/en/latest/readme.html(基於美麗的湯和請求庫的新python庫)一起工作。我的Django應用程序包括:如何在Robobrowser中使用代理

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

參考由於RoboBrowser使用請求庫,你可以嘗試通過設置環境變量HTTP_PROXYHTTPS_PROXYrequest docs提到設置代理。

+0

請參閱編輯 – user61629

+0

嘗試使用「10.10.1.10:3128」作爲代理值或「HTTP://用戶:[email protected]:3128 /」我有 – arocks

+0

原來一代理字符串末尾的附加字符很少。當我刪除它們時,它開始使用pr =「http://10.10.1.10:3128/」。非常感謝您的幫助。 - 賬單 – user61629

9

在RoboBrowser最近的一些API清理之後,現在有兩種相對直接的方式來控制代理。首先,您可以在您的請求會話中配置代理,然後將該會話傳遞給您的瀏覽器。這會將您的代理應用於通過瀏覽器進行的所有請求。

from requests import Session 
from robobrowser import RoboBrowser 

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

其次,您可以在每個請求的基礎上設置代理。 RoboBrowseropen,follow_linksubmit_form方法現在接受requests.Session.send的關鍵字參數。例如:

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

謝謝,非常感謝 - Bill – user61629

+0

我剛剛意識到robobrowser是您的項目。感謝您創建它! - 條例草案 – user61629

+0

順便說一句,如果你有第二,我有一個新的問題在http://stackoverflow.com/questions/25067874/how-to-submit-a-form-with-a-get-action-using-robobrowser – user61629