python - 修改 Python 代码以使用 SSL 进行 REST 调用

标签 python rest ssl

我有 Python 代码来调用类似这样的 REST 服务:

import urllib 
import urllib2 

username = 'foo' 
password = 'bar' 

passwordManager = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passwordManager .add_password(None, MY_APP_PATH, username, password) 
authHandler = urllib2.HTTPBasicAuthHandler(passwordManager) 
opener = urllib2.build_opener(authHandler) 
urllib2.install_opener(opener) 

params= { "param1" : param1, 
          "param2" : param2, 
          "param3" : param3 } 

xmlResults = urllib2.urlopen(MY_APP_PATH, urllib.urlencode(params)).read() 
results = MyResponseParser.parse(xmlResults) 

MY_APP_PATH 当前是一个 HTTP url。我想将其更改为使用 SSL(“HTTPS”)。我将如何更改此代码以尽可能以最简单的方式使用 https?

最佳答案

不幸的是,urllib2httplib,至少在 Python 2.7 之前,在使用 HTTPS 时不做任何证书验证。结果是您正在与您未必确定的服务器交换信息(这有点像与您未验证其身份的人交换 secret ):这违背了 HTTPS 的安全目的。

请参阅 httplib (in Python 2.7) 中的这句话:

Note: This does not do any certificate verification.

(这与能够发送客户端证书的httplib.HTTPSConnection 无关:这就是它的keycert 参数为。)

有很多方法可以解决这个问题,例如:

关于python - 修改 Python 代码以使用 SSL 进行 REST 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704405/

相关文章:

python - Django DisallowedModelAdminLookup 用于在 Admin list_filter 中查找

java - 泽西网络服务。出现 404 错误

具有自签名证书的 Java (Netty) SSL 服务器/客户端抛出 fatal error : 80: pr0blem unwrapping net record

c# - 使用 Mono 或 Bouncy CaSTLe c# 实现 TLS

ssl - 证书颁发机构签署 CSR 时的安全隐患

python - 如何找到与给定字符串匹配的字符串类型项(包含在子列表中)的所有索引?

python - 如何设置 Tkinter 对话框弹出窗口的位置?

python - Flask RESTful POST JSON 失败

Python:多个函数调用附加到同一个列表

javascript - AngularJS 预期信息未显示