2012-02-06 71 views
2

我寫一個簡單的上傳腳本,只是釣到接下來的事情:捲曲試圖做PUT一個FTP服務器上:捲曲(pycurl)FTP over HTTP代理

簡化代碼:

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 

而且同樣的反應,當我嘗試這樣做從外殼:

curl --upload-file "asus.c" --proxy 10.0.0.35:3128 \ 
--proxytunnel -u username:password ftp://<ftp_name>/asus.c 

爲什麼?我錯過了什麼?

+0

它看起來像你試圖說服HTTP到FTP服務器。您的代理是否以這些設置作爲FTP代理工作,例如從瀏覽器或已知的FTP客戶端? – 9000 2012-02-06 19:03:37

+0

是的。 FileZilla通過這個代理連接(並上傳)罰款(這是一個配置的魷魚)。 – 2012-02-06 19:12:24

回答

0

用於FTP上傳的語法是:

curl -u "[email protected] Proxy-Username:Remote-Pass"  --ftp-account Proxy-Password --upload-file local-file  ftp://my-ftp.proxy.server:21/remote/upload/path/ 
+1

目標是通過http代理上傳。 – 2012-03-26 23:04:31

2

這裏是爲我工作的格式。

curl --user 'ftp_user:ftp_password' --disable-epsv --proxytunnel -x 'yourproxy.com:port' -T 'your.localfile' 'ftp://remote.ftp.org:port/path' -v 

我花了很多時間與這些參數作鬥爭,讓我知道如果你捲曲爲ftp問題。

下面是一些參數相關:

-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目錄。

使用摘要身份驗證

--basic遠程FTP使用基本身份驗證--digest遠程FTP

-3 or --sslv3(SSL)強制捲曲使用SSL版本3時與遠程SSL服務器

-p or --proxytunnel連接,如果你有-x or --proxy該選項將導致非http協議嘗試通過代理進行隧道傳輸,而不是僅使用它來執行類似http的操作。

-v or --verbose如果你需要詳細的

--ftp-ssl