我们希望与需要证书和密码的服务提供商建立SSL连接。这似乎很容易在Curl上做(见下文),因为有一个SSLCERTPASSWD参数(见下文)。但我们希望与Python及其ssl库建立连接,其中唯一可用的参数是ca_cert(指代证书文件)。有没有人知道如何克服Python 2.7的这种限制?
这是卷曲
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'asdf');
// curl_setopt($ch, CURLOPT_SSLVERSION, 5); // let server decide
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // this stops the data returning
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
if($result = curl_exec($ch) === false) {
die('Curl error: ' . curl_error($ch));
}
非常感谢提前
答案 0 :(得分:0)
如果pycurl是一个选项。这可能对你有所帮助
import pycurl
import StringIO
b = StringIO.StringIO()
c = pycurl.Curl()
url = "https://example.com"
c.setopt(pycurl.URL, url)
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.CAINFO, "/path/cacert.pem")
c.setopt(pycurl.SSLKEY, "/path/key_file.pem")
c.setopt(pycurl.SSLCERT, "/path/cert_file.pem")
c.setopt(pycurl.SSLKEYPASSWD, "your pass phrase")
c.perform()
c.close()
result = b.getvalue()