Python套接字服务器处理HTTPS请求

时间:2015-08-18 03:13:13

标签: python sockets ssl https

我使用Python 2.7和socket模块编写了一个套接字服务器。

当我发出HTTP请求时,一切都按预期工作:服务器接受它并正确回答。但是,如果不是(比方说)http://a.com我浏览https://a.com我收到某种加密标头,我不知道如何告诉客户端服务器不支持HTTPS。

我用谷歌搜索了一下,但没什么好处的。我尝试用普通的HTTP回复,但浏览器明显忽略了响应。

如果有人能够告诉我一个方法告诉客户没有SSL,它会对我有所帮助。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。你必须配置" ssl"代码中的上下文如下:

import socket, ssl

HOST = "www.youtube.com"
PORT = 443

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s_sock = context.wrap_socket(s, server_hostname=HOST)
s_sock.connect((HOST, 443))
s_sock.send(" GET / HTTP/1.1\r\nHost: www.youtube.com\r\n\r\n ".encode())

while True:
    data = s_sock.recv(2048)
    if ( len(data) < 1 ) :
        break
    print(data)

s_sock.close()

答案 1 :(得分:0)

尝试this。模块名称已更改,因此它们现在已成为http.server模块的一部分(标准安装的一部分)-请参阅Python 2的SimpleHTTPServer documentation顶部的注释。尽管如此,主要问题是,是您需要获取SSL证书来保护连接的安全(我认为最简单的方法是OpenSSL)。