python - 使用 python 2.7.13 请求的 ssl 连接

标签 python ssl python-requests

我尝试使用 python 请求包通过 SSL 进行连接,我使用了以下代码。

resp = requests.get(addr , auth=HttpNtlmAuth(userFile[unum],passFile[pnum]) , headers = {'User-Agent':'Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)'} , verify = False)

但每次我都低于错误。

("bad handshake: SysCallError(-1, 'Unexpected EOF')",)

更新 1:

我转储主机证书并将其保存到 c.cert 并使用下面的代码。

resp = requests.get(addr , auth=HttpNtlmAuth(userFile[unum],passFile[pnum]) , headers = {'User-Agent':'Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)'} , cert = '/home/user/Desktop/c.cert' , verify = '/home/user/Desktop/c.cert')

和新的错误。

[('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]

更新 2:

这是 Burp Suite 捕获的内容。

(首先, session 创建):

GET /PATH HTTP/1.1
Host: HOST
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Cookie: ASPSESSIONIDCQCTCTCQ=EPEHGDDAKOINODAJJKCELEOK
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

(二、使用凭据时):

GET /PATH HTTP/1.1
Host: HOST
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Cookie: ASPSESSIONIDCQCTCTCQ=EPEHGDDAKOINODAJJKCELEOK
DNT: 1
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=
Connection: close

(第三,凭证错误)

GET /PATH HTTP/1.1
Host: HOST
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Cookie: ASPSESSIONIDCQCTCTCQ=EPEHGDDAKOINODAJJKCELEOK
DNT: 1
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGAAAACIAIgAeAAAAAAAAABAAAAACgAKAEAAAAAWABYASgAAAAAAAAAAAAAABYIIAGEAZABtAGkAbgBXAE8AUgBLAFMAVABBAFQASQBPAE4Ao8+kG6lMZcLmQys5IUkpayq+W1VFZPkjUQjxBhzugt88vU6RR3wahQEBAAAAAAAAgPonWPz30gGr58MfeUgvgQAAAAACABIAVwBFAEIAUwBFAFIAVgBFAFIAAQASAFcARQBCAFMARQBSAFYARQBSAAQAEgBXAEUAQgBTAEUAUgBWAEUAUgADABIAVwBFAEIAUwBFAFIAVgBFAFIAAAAAAA==
Connection: close

当使用不带 HTTPS 的 URL 时,它给我的页面有以下自定义错误

错误请求(无效主机名)

最佳答案

也许您需要创建一个 SSL 上下文,并将其传递给请求。

import ssl
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) #if you need TLS v1.2

然后,将此上下文变量传递给请求方法。如果是可选的关键字参数,请命名为 context。所以,调用将是这样的:

resp = requests.get(addr, ...., context=context)

关于python - 使用 python 2.7.13 请求的 ssl 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44986521/

相关文章:

python - 在大型 3D Numpy 数组中查找局部最大值

PHP MySQLi 与 SSL 的持久连接

perl - LWP::UserAgent 无法使用 TLS1.1 发布

python 缩短嵌入的 try-except block

Python 3.x 请求使用 unicode 字符进行重定向

python - POST 无需重新加载整个网页

python - 在mysql中导入csv文件

python - 从文本字符串解析数据对象结构

python - 填写部分文本后如何点击自动完成?

wordpress - Cloudflare » 图像丢失并出现 404 错误,仅在 Chrome 上