我正在尝试从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的内容。
答案 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]>