我编写了简单的上传脚本,然后抓住了下一件事:curl尝试在 ftp 服务器上执行 PUT :
简化代码:
import pycurl
from os.path import getsize
c = pycurl.Curl()
c.setopt(pycurl.URL, 'ftp://<ftp_name>:21/asus.c')
c.setopt(pycurl.USERPWD, 'username:password')
c.setopt(pycurl.PROXY, '10.0.0.35')
c.setopt(pycurl.PROXYPORT, 3128)
c.setopt(pycurl.VERBOSE, 1)
f = open('asus.c')
c.setopt(pycurl.INFILE, f)
c.setopt(pycurl.INFILESIZE, getsize('asus.c'))
c.setopt(pycurl.HTTPPROXYTUNNEL, 1)
c.setopt(pycurl.UPLOAD, 1)
c.perform()
几个月前,几乎相同的代码运作良好,但是:
* About to connect() to proxy <IP> port 3128 (#0)
* Trying <IP>... * connected
* Connected to <IP> (<IP>) port 3128 (#0)
* Establish HTTP proxy tunnel to <ftp_name>:21
* Server auth using Basic with user 'username'
> CONNECT <ftp_name>:21 HTTP/1.1
Host: <ftp_name>:21
User-Agent: PycURL/7.21.6
Proxy-Connection: Keep-Alive
< HTTP/1.0 200 Connection established
<
* Proxy replied OK to CONNECT request
* Server auth using Basic with user 'username'
> PUT /asus.c HTTP/1.1
Authorization: Basic _______________________________
User-Agent: PycURL/7.21.6
Host: <ftp_name>:21
Accept: */*
Content-Length: 2627
Expect: 100-continue
220 ProFTPD 1.3.3 Server (______ FTP Server) [<IP>]
500 PUT not understood
500 AUTHORIZATION: not understood
500 USER-AGENT: not understood
500 HOST: not understood
500 ACCEPT: not understood
500 CONTENT-LENGTH: not understood
500 EXPECT: not understood
500 Invalid command: try being more creative
当我尝试从shell执行此操作时的响应相同:
curl --upload-file "asus.c" --proxy 10.0.0.35:3128 \
--proxytunnel -u username:password ftp://<ftp_name>/asus.c
为什么呢?我错过了什么?
答案 0 :(得分:2)
这是适用于我的格式。
curl --user 'ftp_user:ftp_password' --disable-epsv --proxytunnel -x 'yourproxy.com:port' -T 'your.localfile' 'ftp://remote.ftp.org:port/path' -v
我花了很多时间来讨论这些参数,请告诉我你是否有卷曲问题。
以下是一些相关的参数:
-U or --proxy-user <proxy_user:proxy_password>
如果您需要代理凭据
-u or --user <ftp_user:ftp_password>
如果你有远程ftp用户名和密码
--proxy-digest
如果您的代理使用摘要式身份验证
--proxy-basic
如果您的代理使用基本身份验证
--proxy-anyauth
如果要检测代理身份验证
-l or --list-only
如果您只想列出一个FTP目录。
--digest
远程ftp
--basic
远程ftp
-3 or --sslv3
(SSL)强制curl在连接远程ssl服务器时使用SSL版本3
-p or --proxytunnel
如果您有-x or --proxy
此选项将导致非http协议尝试隧道通过代理,而不是仅使用它来执行类似http的操作。
-v or --verbose
如果您需要详细
--ftp-ssl
答案 1 :(得分:0)
ftp upload的语法是:
curl -u "Remote-FTP-Username@remote.ftp.server Proxy-Username:Remote-Pass" --ftp-account Proxy-Password --upload-file local-file ftp://my-ftp.proxy.server:21/remote/upload/path/