【发布时间】:2013-02-05 15:35:57
【问题描述】:
我目前正在为我编写的编译器编写一个 python 语言插件,它可以自动执行 RESTful API 的 http 调用。我已经设法使用 socket 和 ssl 模块使登录/身份验证正常工作,但是这种低级方法似乎会在解析响应以获取身份验证令牌和机密时产生潜在问题。 requests 模块似乎很流行/高效,但是,我似乎无法让它正常运行以满足我的特定身份验证需求。我正在使用 .pem 文件(仅包含一个公钥)形式的信任库,该文件是从用于验证 Java 插件的 .jks 文件转换而来的。服务器期望用户名和密码以 json 格式提交到请求正文中。这是我一直在尝试使用的代码:
#Server and login data
...
host = 'localhost'
port = 8443
pem_file = "C:\\Users\\aharasta\\pycert.pem"
#Digest password with MD5 algorithm
m = hashlib.md5()
m.update(password)
encrypted_password = m.hexdigest()
url = <url>
data = {'userid': user_name, 'password': encrypted_password}
json_data = json.dumps(data)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain', 'Content \
Length': len(json_data)}
r = requests.post(url, headers = headers, data = json_data, cert = pem_file)
print(r)
执行时,此代码将引发 SSL 错误,指出“证书验证失败”。如果我添加参数verify = False 或verify = pem_file,我将收到来自服务器的404 响应。我还应该注意,当我在调试模式下启动服务器并执行请求(使用验证参数之一)时,它永远不会进入服务器的身份验证方法或任何与此相关的方法。 非常感谢您对此事的任何见解或帮助!
【问题讨论】:
标签: python authentication python-requests truststore urllib3