PYTHON
refresh
NIM
import requests
url = "https://REDACTED/pb/s/api/auth/login"
r = requests.post(
url,
data = {
'username': 'username',
'password': 'password'
}
)
我正在调用API来获取一些数据。运行python代码,我得到下面的追溯。但是,nim代码可以完美运行,因此python代码或设置一定存在问题。
我正在运行python版本2.7.15。 请求lib版本2.19.1
import httpclient, json
let client = newHttpClient()
client.headers = newHttpHeaders({ "Content-Type": "application/json" })
let body = %*{
"username": "username",
"password": "password"
}
let resp = client.request("https://REDACTED.com/pb/s/api/auth/login", httpMethod = httpPOST, body = $body)
echo resp.body
答案 0 :(得分:1)
requests
模块将验证从服务器获取的证书,就像浏览器一样。 requests
会引发该异常,而不是像您在浏览器中那样单击并说出“添加异常”。
有一种解决方法:尝试将verify=False
添加到您的post
通话中。
答案 1 :(得分:1)
但是,nim代码可以完美运行,因此python代码或设置一定存在问题。
实际上,您对Python代码或设置的责任不大,而应该使用nim
代码,或者最好使用httpclient
库中的默认值。在nim
的文档中可以看到,httpclient.request
默认使用getDefaultSSL
返回的SSL上下文,该上下文根据this code创建了不验证证书的上下文:< / p>
proc getDefaultSSL(): SSLContext =
result = defaultSslContext
when defined(ssl):
if result == nil:
defaultSSLContext = newContext(verifyMode = CVerifyNone)
您的Python代码改为尝试正确验证证书,因为requests
库默认情况下会这样做。而且由于某些问题-您的设置或服务器出现问题,它无法验证证书。
不清楚谁为您的站点颁发了证书,但是如果它不在默认的CA存储中,则可以使用verify
的{{1}}参数来指定颁发者CA。有关详情,请参见this documentation。
如果您尝试访问的站点可与浏览器一起使用,但无法与您的程序一起使用,则可能是因为它使用了特殊的CA,该CA被添加为对浏览器的信任(例如公司证书)。浏览器和Python使用不同的信任库,因此,此添加的证书也需要添加到Python或至少也要信任为您的程序。服务器的设置也可能有问题。浏览器有时可以解决诸如缺少中间证书之类的问题,但Python则不能。如果是可公开访问的网站,则可以使用SSLLabs来检查出什么问题。