我正在尝试建立与https服务器的连接,发送HTTP请求,然后不断侦听打开的连接。我可以建立连接,但是当我尝试发送http消息时,服务器向我发送了HTTP错误426,指示TLS问题。
到目前为止,这是我的代码:
import socket
import ssl
host = 'a host'
port = a port
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
wrapped_socket = ssl.wrap_socket(sock, ssl_version=ssl.PROTOCOL_TLSv1)
wrapped_socket.connect((host, port))
message = b"POST / HTTP/1.1\n" \
b"some headers\n" \
b"\n" \
b"a body"
print(wrapped_socket.send(message)) #prints 426
while True:
data = wrapped_socket.recv(1024)
if not data:
break
print("Received: " + str(data))
消息本身绝对不是问题,因为我可以通过Postman发送消息并获得预期的结果(HTTP 200)。谷歌搜索了一段时间后,我认为问题是我没有设置某种证书。我尝试了一些涉及SSL上下文的内容,但这会导致握手错误。我只是使用许多不同的方法,程序包和东西找到了这么多不同的答案,以至于我太困惑以至于无法亲自看到解决方案。而且我对网络协议和内容的了解还很差。