如何在Python套接字中加密http请求
输出:如何在Python套接字中加密http请求,python,sockets,ssl,Python,Sockets,Ssl,输出: import socket import ssl host = 'postlm.com' #browsec addon v2.0.7 port = 443 def pp(a): s = socket.socket() s = ssl.wrap_socket(s) s.connect((host, port)) s.send(a) aaa=b'' for i in range(
import socket
import ssl
host = 'postlm.com' #browsec addon v2.0.7
port = 443
def pp(a):
s = socket.socket()
s = ssl.wrap_socket(s)
s.connect((host, port))
s.send(a)
aaa=b''
for i in range(2):
aa=s.recv(10240)
if not aa:break
print('='*100)
if b'Connection established' in aa:
a=(a.replace(b'CONNECT ',b'GET https://'))
s.send(a)
continue
aaa+=aa
break
s.close()
return (aaa)
if __name__ == '__main__':
j=b'CONNECT www.wikipedia.org:443 HTTP/1.1\r\nHost: www.wikipedia.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-GB,en;q=0.5\r\nProxy-Authorization: Basic NWE5MTMxODE5ZjY4NjNlOWJkMDAwYjdiOkdXbHVpTm9JejMzMTRvZXNFemI3emNLTXU2aHZrc214\r\nAccept-Encoding: gzip, deflate\r\nProxy-Connection: keep-alive\r\n\r\n'
# j=b'GET http://example.com HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-GB,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\n\r\n'
a=pp(j)
print(a)
b'HTTP/1.1 400错误请求\r\n服务器:nginx/1.13.6\r\n日期:Sun,2018年3月25日12:20:29 GMT\r\n内容类型:text/html\r\n内容长度:271\r\n连接:关闭\r\n\r\n\r\n400普通HTTP请求被发送到HTTPS端口\r\n\r\n400错误请求\r\n普通HTTP请求被发送到HTTPS端口\r\n
普通HTTP请求已发送到HTTPS端口
这是带有此加载项的较旧版本的加载项,我可以在整个系统中使用它,代理为localhost:49736我不完全清楚如果您的代码是什么意思,因为您只转储了一些代码,而没有记录其功能。但我试着从中提取出你可能在做什么,你的问题在哪里。根据代码,我可以看到您正在执行以下操作:
GET https://
请求。CONNECT的期望是,它只构建一个隧道,任何加密的流量(即您的https://URL)都应该在隧道内完成这意味着在发送下一个HTTP请求之前,您需要在已建立的加密(到代理)的基础上进行另一次加密(到目标站点)。但是你没有这样做,这就是为什么它(wikipedia.org)抱怨说一个普通的HTTP请求被发送到HTTPS套接字我认为不能用Python实现这种双重ssl包装。除此之外,您不应将
https://
URL作为HTTP(非代理)请求中的路径,而应仅作为服务器上的路径。这似乎回答了您的问题:@DanSteingart Itz for WebSocket。包装时,cert_reqs也默认为cert_NONEsocket@SmartManoj当前位置我不知道你想用这句话问什么。我特别不知道你说的P2或P4是什么意思。并且CONNECT方法在请求中没有协议,请参阅。我不知道你想用什么工具来实现这一点——我也不知道你首先想要什么,因为你还没有记录下你真正想要做什么。我正在尝试连接到(遗留扩展) proxy@SmartManoj:我不知道这个代理做什么,也不知道连接到它需要什么。我尝试用python模拟扩展
b'HTTP/1.1 400 Bad Request\r\nServer: nginx/1.13.6\r\nDate: Sun, 25 Mar 2018 12:20:29 GMT\r\nContent-Type: text/html\r\nContent-Length: 271\r\nConnection: close\r\n\r\n<html>\r\n<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>\r\n<body bgcolor="white">\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>The plain HTTP request was sent to HTTPS port</center>\r\n<hr><center>nginx/1.13.6</center>\r\n</body>\r\n</html>\r\n'