Python通过HTTP代理与pysftp连接

目前,我正在使用Python psftp.exe和PuTTY psftp.exe进行SFTP传输。

它正在工作,但不是很干净,也不便于携带。

我想重现使用Python pysftp相同的行为,但我不知道在哪里input所有的参数。 我在PuTTY中有以下configuration:

  • 服务器IP:123.123.123.255
  • 服务器端口:22
  • 连接types:SSH
  • AutoLogin用户名:MyUser
  • 代理types:HTTP
  • 代理主机名:gw.proxy.fr
  • 代理端口:1234
  • 代理用户名:ProxyUser
  • 代理密码:ProxyPass

我应该如何在pysftp中input所有这些参数,以便检索我的文件?

编辑:使用Martin Prikryl的答案,我发现了一些新的东西来探索。 如果我理解的很好,我需要使用套接字。 把我仍然有一些问题,以input我需要的所有信息。

 import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) proxy = ("gw.proxy.fr",1234) sock.connect(proxy) target=("123.123.123.255",23) cmd_connect = "CONNECT {}:{} HTTP/1.1\r\n\r\n".format(*target) sock.sendall(cmd_connect) 

我收到的回应是HTTP/1.0 407 Proxy Authentication Required 。 在我使用代理身份validation信息的地方,这是一种正常的原因。 那么,你有什么想法我可以使用它们,并将它们input到我的套接字?

我不认为pysftp支持代理。 虽然注意到pysftp只是Paramiko 库的一个包装,它支持代理。

所以我建议你直接使用Paramiko。

一开始请参阅如何在Python中通过http代理ssh? 特别是@tintin的答案 。


要向代理进行身份验证,请在CONNECT命令之后添加Proxy-Authorization标头,如下所示:

 Proxy-Authorization: Basic <credentials> 

<credentials>是基于64位编码的字符串username:password

 cmd_connect = "CONNECT {}:{} HTTP/1.1\r\nProxy-Authorization: Basic <credentials>\r\n\r\n".format(*target)