Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python套接字中加密http请求_Python_Sockets_Ssl - Fatal编程技术网

如何在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

我不完全清楚如果您的代码是什么意思,因为您只转储了一些代码,而没有记录其功能。但我试着从中提取出你可能在做什么,你的问题在哪里。根据代码,我可以看到您正在执行以下操作:

  • 使用SSL连接到postlm.com端口443
  • 通过此SSL连接发送连接请求:这表明postlm.com:443必须是通过HTTPS访问的HTTP代理。这不是一个无效但仍不寻常的设置。这个连接然后建立到www.wikipedia.org的连接。通常,连接需要端口号,但您不提供端口号。在这种情况下,可能假设为443(https)
  • 在您以某种方式读取此代理对请求的响应后,您将检查是否成功。这种检查是不寻常的,因为您不检查HTTP状态代码200,而是检查某些特定字符串。但也许它和这个代理一起工作
  • 然后通过此连接发送
    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'