Python socket server handle HTTPS request

允我心安 提交于 2020-01-21 08:58:07

问题


I wrote a socket server using Python 2.7 and the socket module.

Everything works as expected when I issue an HTTP request: the server accepts it and answers correctly. But if instead of (let's say) http://a.com I browse for https://a.com I receive some kind of encrypted header and I don't know how to tell the client that HTTPS is not supported by the server.

I googled a bit but nothing good. I tried to reply in plain HTTP but the response is clearly ignored by the browser.

If anyone would be able to show me a way to tell the client there's no SSL it would really help me.

Thanks in advance.


回答1:


I had the same problem. You have to configure "ssl" context within your code as such:

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()



回答2:


Try this. The module names have changed so that they are now part of the http.server module (part of a standard installation) - see the note at the top of the SimpleHTTPServer documentation for Python 2. The main problem, though, is that you need to get an SSL certificate to secure connections with (the easiest way I believe is OpenSSL).



来源:https://stackoverflow.com/questions/32062925/python-socket-server-handle-https-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!