如何通过 PyQt4 中的代理发出请求
Posted
技术标签:
【中文标题】如何通过 PyQt4 中的代理发出请求【英文标题】:How to make request through proxy in PyQt4 【发布时间】:2012-12-15 23:49:12 【问题描述】:我想通过 HTTP 代理发出请求,问题是我真的不明白如何设置它。
这是一个示例代码:
#! /usr/bin/env python2.7
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
from bs4 import BeautifulSoup
import sys
class MySettings(QWebPage):
def __init__(self):
QWebPage.__init__(self)
self.settings().setAttribute(QWebSettings.AutoLoadImages, False)
class Browser(QWebView):
def __init__(self):
QWebView.__init__(self)
self.setPage(MySettings())
self.loadProgress.connect(self._progress)
self.loadFinished.connect(self._loadFinished)
self.doc = self.page().currentFrame()
def _progress(self, progress):
print progress
def _loadFinished(self):
html = unicode(self.doc.toHtml()).encode('utf-8')
soup = BeautifulSoup(html[1000])
print soup.prettify()
if __name__ == "__main__":
app = QApplication(sys.argv)
br = Browser()
url = QUrl('http://http://ip2location.com/')
br.load(url)
br.show()
app.exec_()
我已阅读有关 QNetworkAccessManager 类的信息,但不明白我应该把它放在哪里,或者我应该像使用 QWebPage 那样创建一个不同的类:
class MyNetworkAccessManager(QNetworkAccessManager):
def __init__(self):
QNetworkAccessManager.__init__(self)
proxy = QNetworkProxy('HTTP','127.0.0.1', '8080')
self.setProxy(proxy)
如果是这样,如何让我的 Browser(QWebView) 类使用 MyNetworkAccessManager,
或者可能是我完全错了,应该以不同的方式来做。
非常感谢您的帮助。
【问题讨论】:
我知道如何使用 urllib 和 Mechanize 设置代理,但不使用 PyQt4。但是根据这个link,正确的语法是QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.HttpProxy, "proxy.example.com", 8080))
HTH。
【参考方案1】:
要使用您创建的QNetworkAccessManager
子类,请将此代码添加到您的Browser
old_manager = self.page().networkAccessManager()
new_manager = MyNetworkAccessManager(old_manager)
self.page().setNetworkAccessManager(new_manager)
【讨论】:
以上是关于如何通过 PyQt4 中的代理发出请求的主要内容,如果未能解决你的问题,请参考以下文章
如何将通过 Filepicker 发出的文件上传请求转换为使用 PHP 中的简单 HTML 文件控件发出的类似请求?
如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?