pythonrequests证书_requests的ssl证书验证、身份认证、cert文件证书

SSL证书:Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。SSL 验证默认是开启的,如果证书验证失败,Requests 会抛出 SSLError。在该域名requestb.in上没有设置 SSL,所以失败了。代码如下:

# -*- coding: utf-8 -*-

import requests

try:

requests.get('https://requestb.in')

except Exception as e:

print(e)

但 Github 设置了 SSL,可以正常访问,代码如下:

# -*- coding: utf-8 -*-

import requests

def get_html(url, retry=2):

try:

r = requests.get(url=url, headers=headers, verify=True, timeout=5)

except Exception as e:

print(e)

if retry > 0:

get_html(url, retry - 1)

else:

print(r.status_code)

if __name__ == "__main__":

# 自定义请求头信息

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',

}

url = 'https://github.com'

get_html(url)

D:python3installpython.exe D:/python/py3script/test.py

200

Process finished with exit code 0

你可以为verify传入 CA_BUNDLE 文件的路径,或者包含可信任 CA 证书文件的文件夹路径:

requests.get('https://github.com', verify='/path/to/certfile')

或者将其保持在会话中:

s = requests.Session()

s.verify = '/path/to/certfile'

注解: 如果verify设为文件夹路径,文件夹必须通过 OpenSSL 提供的 c_rehash 工具处理。

你还可以通过REQUESTS_CA_BUNDLE环境变量定义可信任 CA 列表。

如果你将verify设置为 False,Requests 也能忽略对 SSL 证书的验证。

requests.get('https://kennethreitz.org', verify=False)

默认情况下,verify是设置为 True 的。选项verify仅应用于主机证书。

# 对于私有证书,你也可以传递一个 CA_BUNDLE 文件的路径给verify。你也可以设置 #REQUEST_CA_BUNDLE环境变量。

NO2:许多 web 服务都需要身份认证,并且也有多种不同的认证类型。 但是现在用的非常少了,我们只说下HTTP Basic Auth。这是最简单的一种身份认证,并且 Requests 对这种认证方式的支持是直接开箱即可用。

以 HTTP Basic Auth 发送请求非常简单,代码如下:

# -*- coding: utf-8 -*-

import requests

from requests.auth import HTTPBasicAuth

def get_html(url,data,retry=2):

try:

r = requests.get(url=url, headers=headers, auth=HTTPBasicAuth(data[0],data[1]))

except Exception as e:

print(e)

if retry > 0:

get_html(url, retry - 1)

else:

print(r.status_code)

if __name__ == "__main__":

# 自定义请求头信息

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',

}

# 密码我已经改了

user_pwd = ['[email protected]','123456']

url = 'https://api.github.com/user'

get_html(url,user_pwd)

D:python3installpython.exe D:/python/py3script/test.py

200

Process finished with exit code 0

事实上,HTTP Basic Auth 如此常见,Requests 就提供了一种简写的使用方式:

requests.get('https://api.github.com/user', auth=('user', 'pass'))

NO3:客户端证书

你也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组:

requests.get('https://kennethreitz.org', cert=('/path/client.cert', '/path/client.key'))

或者保持在会话中:

s = requests.Session()s.cert = '/path/client.cert'

如果你指定了一个错误路径或一个无效的证书:

requests.get('https://kennethreitz.org', cert='/wrong_path/client.pem')

SSLError: [Errno 336265225] _ssl.c:347: error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib

警告

本地证书的私有 key 必须是解密状态。目前,Requests 不支持使用加密的 key。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值