我正在尝试检索URL,但仍然遇到SSLError:HTTPSConnectionPool(host ='developer.uspto.gov',port = 443)

时间:2019-07-26 15:04:11

标签: python python-3.x python-requests urllib

我正在尝试从USPTO设置的API中检索URL。他们的系统提供查询的URL,并且在Web浏览器中搜索时效果很好。但是我在Python3中不断收到此错误

我尝试同时使用urllib和请求来检索数据。

我的代码:

import requests

link = new_url
f = requests.get("https://developer.uspto.gov/ibd-api/v1/patent/application?searchText=device&start=0&rows=2000")
print(f.text)

错误:

SSLError: HTTPSConnectionPool(host='developer.uspto.gov', port=443): Max 
retries exceeded with url: /ibd-api/v1/patent/application? 
searchText=device&start=0&rows=2000 (Caused by SSLError(SSLError("bad 
handshake: Error([('SSL routines', 'tls_process_server_certificate', 
'certificate verify failed')])")))

我希望能够使用json库读取此URL的内容。

2 个答案:

答案 0 :(得分:1)

可以通过在您的get请求中添加verify = False来轻松解决此错误。

我建议您用以下代码替换当前代码:

import requests

link = new_url
f = requests.get("https://developer.uspto.gov/ibd-api/v1/patent/application?searchText=device&start=0&rows=2000", verify=False)
print(f.text)

Here是有关SSL证书验证的更多信息。

希望这会有所帮助

答案 1 :(得分:0)

您的网址似乎遇到了this question遇到的相同问题(accepted answer描述了问题; Here's the SSLLabs report on the host

我能够通过从原始URL下载证书,将两个Entrust证书导出到它们自己的文件(Entrust证书颁发机构-L1K&Entrust.net),然后创建一个.pem来解决SSL问题。他们之间的信任链(响应中缺少Entrust L1K证书):

cat entrustL1K.cer entrustNET.cer > entrust_chain.pem

然后,您可以将此信任链传递到requests.get来修复响应:

url = "https://developer.uspto.gov/ibd-api/v1/patent/application?searchText=device&start=0&rows=2000"
requests.get(url, verify='entrust_chain.pem')

>>> <Response [200]>