我正在尝试通过请求包连接到我公司的内部网页,但由于 python 不使用 Windows 默认可信证书,因此连接被拒绝。我发现 wincertstore 可用于获取 Windows 默认证书。但我仍然不确定如何将它与我的请求一起使用。以下是我迄今为止尝试过的代码......
import requests, socket, atexit, ssl, wincertstore
from requests.auth import HTTPBasicAuth
certfile = wincertstore.CertFile()
certfile.addstore("CA")
certfile.addstore("ROOT")
atexit.register(certfile.close)
ssl_sock = ssl.wrap_socket(s,ca_certs=certfile.name,
cert_reqs=ssl.CERT_REQUIRED)
requests.get(url)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误......
requests.exceptions.SSLError: HTTPSConnectionPool(host='myhost', port=443): Max retries exceeded with url: myurl (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
我可以在同一个网址上使用 wget 并下载内容。
wget --no check certificate --user=my username --password=my password URL
但我对下载内容不感兴趣,因为我只需要抓取网页内容的一小部分。
Python 版本 = 3.6.5
Wincertstore 链接 -链接
在此先感谢您的帮助..............
我在新电脑上第一次下载了 python(版本 3.10.4)。python-certifi-win32在有人在与我遇到的问题类似的问题中建议将其作为 SSL 证书问题的解决方案后,我已经下载了该软件包。从那时起,pip就完全停止工作了,以至于我无法运行pip --version
每次打印相同的错误时,它大多看起来都是垃圾(只是一个深层堆栈跟踪),但最后的文件是不同的。
打印日志的开始:
Traceback (most recent call last):
File "C:\Users\---\AppData\Local\Programs\Python\Python310\lib\importlib\_common.py", line 89, in _tempfile
os.write(fd, reader())
File "C:\Users\---\AppData\Local\Programs\Python\Python310\lib\importlib\abc.py", line 371, in read_bytes
with self.open('rb') as strm:
File "C:\Users\---\AppData\Local\Programs\Python\Python310\lib\importlib\_adapters.py", line 54, in open
raise ValueError()
ValueError
During handling of the above exception, another exception occurred:
Run Code Online (Sandbox Code Playgroud)
打印日志的最后一行:
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\-----\\AppData\\Local\\Temp\\tmpunox3fhw'
Run Code Online (Sandbox Code Playgroud) 我正在使用访问RESTful API的请求。一切似乎都正常。我可以进行身份验证,拉回会话令牌,甚至可以对我为API编写的类中的方法进行单元测试。然后我尝试运行我的代码。
首先,这是我打的电话。标头是在init()中设置的与会话相关的静态项。主体是根据文件中的数据动态构建的,并传递给此函数。所有数据均有效。
response = requests.post(url, headers=(Requestheader), data=json.dumps((Requestbody)))
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,它将使用我提供的元数据更新100多个记录。在项目150的某处,我得到以下信息:
ssl.SSLCertVerificationError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败:证书链中的自签名证书(_ssl.c:1045)
我的第一步是打电话给供应商,以了解他们的所有Web服务器是否都已正确签署证书,以证明它们在负载均衡我时发现了配置错误的服务器。他们告诉我事实并非如此。
然后,我用Google搜索消息,发现有一个验证kwarg,因此我尝试:
response = requests.post(url, headers=Requestheader, data=json.dumps(Requestbody), verify=False)
Run Code Online (Sandbox Code Playgroud)
我知道这不是理想的长期方法,但是我想对其进行测试以查看行为是否相同。它做同样的事情。它运行了一段时间,并抛出了ssl错误。我认为verify = False的想法是不会检查。
供应商建议我检查正在使用的url,但这很好。我想如果有代理服务器或真正的中间人攻击引起问题,那么我在失败之前不会看到很多次成功。我以为这可能是会话超时,但是应该抛出401状态,并且我的活动水平对于非活动超时来说太高了。
我是python noob,不是安全专家。建议表示赞赏。
我正在努力从 Python 调用 Rest-API。我已经使用 Postman 测试了所有 Rest-API,并且工作正常。但是,在使用 Python 脚本执行这些脚本时,我遇到了认证错误。
我正在从 Windows cmd 执行 python 脚本。
下面是代码:
import requests
import certifi
from urllib.request import urlopen
import ssl
requestCert = 'https://someurl.com:4443/api/11/projects/'
urlopen(requestCert, context=ssl.create_default_context(cafile=certifi.where()))
headers = {
"Authorization": "fdsfsfdewrwerwer",
"X-Auth-Token": "YxzcfhnkniGVGljghjmwCIGLfhfsfdzxc4o5sSADtaT2"
}
#response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers)
#response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers, verify=certifi.where())
response = requests.get('https://someurl.com:4443/api/11/projects', headers=headers, verify='server.pem')
print(response)
Run Code Online (Sandbox Code Playgroud)
进一步调试。。。即使简单import requests print('Hello, world!')并pip install requests给出相同的错误。我想问题不在代码中,而是与模块导入功能有关。
我收到的错误如下。
Traceback (most recent call last):
File "C:\Users\eddie\Desktop\PyPoc\Py_Job\importJob.py", line 1, in <module>
import requests
File "C:\Users\eddie\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\__init__.py", …Run Code Online (Sandbox Code Playgroud)