在代理后面使用 MechanicalSoup
Using MechanicalSoup behind proxy
我正在尝试使用 MechanicalSoup 在 Python 上 Windows 构建一个简单的网络机器人。不幸的是,我坐在(公司强制执行的)代理后面。我找不到为 MechanicalSoup 提供代理的方法。有这样的选择吗?如果没有,我有什么选择?
编辑:按照 Eytan 的提示,我在我的代码中添加了 proxies
和 verify
,这让我更进一步,但我仍然无法提交表格:
import mechanicalsoup
proxies = {
'https': 'my.https.proxy:8080',
'http': 'my.http.proxy:8080'
}
url = 'https://whosebug.com/'
browser = mechanicalsoup.StatefulBrowser()
front_page = browser.open(url, proxies=proxies, verify=False)
form = browser.select_form('form[action="/search"]')
form.print_summary()
form["q"] = "MechanicalSoup"
form.print_summary()
browser.submit(form, url=url)
代码挂在最后一行,submit
不接受proxies
作为参数。
根据他们的文档,这应该有效:
browser.get(url, proxies=proxy)
尝试将 'proxies' 参数传递给您的请求。
似乎必须在会话级别指定代理。然后在 browser.open
中不需要它们并且提交表单也有效:
import mechanicalsoup
proxies = {
'https': 'my.https.proxy:8080',
'http': 'my.http.proxy:8080'
}
url = 'https://whosebug.com/'
browser = mechanicalsoup.StatefulBrowser()
browser.session.proxies = proxies # THIS IS THE SOLUTION!
front_page = browser.open(url, verify=False)
form = browser.select_form('form[action="/search"]')
form["q"] = "MechanicalSoup"
result = browser.submit(form, url=url)
result.status_code
returns 200(即 "OK")。
我正在尝试使用 MechanicalSoup 在 Python 上 Windows 构建一个简单的网络机器人。不幸的是,我坐在(公司强制执行的)代理后面。我找不到为 MechanicalSoup 提供代理的方法。有这样的选择吗?如果没有,我有什么选择?
编辑:按照 Eytan 的提示,我在我的代码中添加了 proxies
和 verify
,这让我更进一步,但我仍然无法提交表格:
import mechanicalsoup
proxies = {
'https': 'my.https.proxy:8080',
'http': 'my.http.proxy:8080'
}
url = 'https://whosebug.com/'
browser = mechanicalsoup.StatefulBrowser()
front_page = browser.open(url, proxies=proxies, verify=False)
form = browser.select_form('form[action="/search"]')
form.print_summary()
form["q"] = "MechanicalSoup"
form.print_summary()
browser.submit(form, url=url)
代码挂在最后一行,submit
不接受proxies
作为参数。
根据他们的文档,这应该有效:
browser.get(url, proxies=proxy)
尝试将 'proxies' 参数传递给您的请求。
似乎必须在会话级别指定代理。然后在 browser.open
中不需要它们并且提交表单也有效:
import mechanicalsoup
proxies = {
'https': 'my.https.proxy:8080',
'http': 'my.http.proxy:8080'
}
url = 'https://whosebug.com/'
browser = mechanicalsoup.StatefulBrowser()
browser.session.proxies = proxies # THIS IS THE SOLUTION!
front_page = browser.open(url, verify=False)
form = browser.select_form('form[action="/search"]')
form["q"] = "MechanicalSoup"
result = browser.submit(form, url=url)
result.status_code
returns 200(即 "OK")。