通过pysftp通过HTTP代理进行Python连接

史蒂文

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

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

我想使用Python pysftp重现相同的行为,但是我不知道在哪里输入所有参数。我在PuTTY中具有以下配置:

  • 服务器IP:123.123.123.255
  • 服务器端口:22
  • 连接类型:SSH
  • 自动登录用户名:MyUser
  • 代理类型:HTTP
  • 代理主机名:gw.proxy.fr
  • 代理端口:1234
  • 代理用户名:ProxyUser
  • 代理密码:ProxyPass

如何在pysftp中输入所有这些参数,以便可以检索文件?

编辑:使用马丁·普里克里(Martin Prikryl)的答案,我发现了一些新的东西要探索。如果我理解得很好,则需要使用套接字。我仍然在输入我需要的所有信息时遇到一些问题。

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,这很正常,因为我没有在任何地方使用代理身份验证信息。那么,您是否知道如何使用它们并将其输入到我的插座中?

马丁·普里克里(Martin Prikryl)

我不认为pysftp支持代理。不过请注意,pysftp只是Paramiko的包装,它确实支持代理。

因此,我建议您直接使用Paramiko。

首先,请参阅如何在Python Paramiko中通过HTTP代理进行SSH?,尤其是@tintin答案


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

Proxy-Authorization: Basic <credentials>

其中<credentials>是以base-64编码的string username:password

auth = 'Basic ' + base64.encodebytes("username:password".encode()).decode()
args = ("123.123.123.255", 23, auth)
cmd_connect = "CONNECT {}:{} HTTP/1.1\r\nProxy-Authorization: {}\r\n\r\n".format(*args)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章