如何使用pythongnutls发送请求

2024-09-26 17:51:44 发布

您现在位置:Python中文网/ 问答频道 /正文

因为新版本的openssl取消了对3DES的支持,所以我必须使用这个库来发送未使用libopenssl的原始套接字请求。
我从github上托管的python gnutls网站页面上阅读了文档和测试演示。
这是我的密码: win10 python 3.9 python-gnutls 3.1.3 gnutls 3.5.19

import socket

from gnutls.connection import *

# this is the host only 3DES under TLS1.0, even though there is a # 302 redirection.
# hostname = 'www.mycardtamoil.it' 

hostname = 'stackoverflow.com'
ctx = TLSContext(X509Credentials())

sock = socket.create_connection((hostname, 443))
s = ClientSession(sock, ctx)
s.handshake()
print(s.peer_certificate.subject)
print(s.protocol.decode(), s.cipher.decode())
#s.send(f'GET / HTTP/1.1\r\nHost: {hostname}\r\n\r\n') Wrong usage
s.send(memoryview(f'GET / HTTP/1.1\r\nHost: {hostname}\r\n\r\n\r\n'.encode()))
print(s.recv(1024).decode())
s.bye()
s.close()

使用错误且未使用memoryview类型的结果:

CN=*.stackexchange.com
TLS1.2 AES-128-GCM
HTTP/1.1 400 Bad Request
Connection: close
Content-Length: 11
content-type: text/plain; charset=utf-8

现在的问题是如何向普通网站发送GET请求

我在2021-04-29解决了这个问题。
s.send(memoryview(f'GET / HTTP/1.1\r\nHost: {hostname}\r\n\r\n\r\n'.encode()))写入
s.send(f'GET / HTTP/1.1\r\nHost: {hostname}\r\n\r\n') 使用了错误的类型


Tags: importcomsendhttpgetis网站socket

热门问题