如何在不使用 urlopen 的情况下发出 urllib2 POST 请求?

How to make a urllib2 POST request without using urlopen?

使用 python 2. 我有一个 BasicAuthHandler,它已安装为我用来向一个站点发出请求的开启程序。

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, base_url, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)

我现在想在没有开启器的情况下向另一个站点发出请求。我无法使用请求库,因为我使用的是 gooogle 应用程序引擎,我必须安装另一个库才能使其与 GAE 一起正常工作。那么有没有办法在发出这个请求之前卸载一个开启器并重新安装它?

您可以构建和安装不同的开启器。我是这样做的:

opener2 = urllib2.OpenerDirector()
default_classes = [urllib2.HTTPHandler, urllib2.HTTPDefaultErrorHandler,
                   MyFTPHandler, urllib2.HTTPErrorProcessor]
if hasattr(httplib, 'HTTPS'):
    default_classes.insert(0, urllib2.HTTPSHandler)
for klass in default_classes:
    opener2.add_handler(klass())

urllib2.install_opener(opener2)

使用然后return到第一个开场白(urllib2.install_opener(opener))。