2012-02-06 4 views
2

Я пишу простой скрипт загрузки и просто поймала следующую вещь: завиток пытается сделать PUT на FTP сервер: сCurl (pycurl) FTP через 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

+0

Да. FileZilla подключается (и загружает) через этот прокси (это настроенный кальмар). –

ответ

0

Синтаксис ФТП является:

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-proxy. –

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> если у вас есть удаленный логин передачи файлов и пароль

--proxy-digest если ваше использование прокси-дайджест-проверки подлинности

--proxy-basic если ваша прокси использует базовую аутентификацию

--proxy-anyauth Если вы хотите установить аутентификацию прокси-сервера

, если вы хотите только указать каталог FTP.

--digest удаленного FTP с использованием дайджест-проверки подлинности

--basic удаленного FTP с использованием базовой аутентификации

-3 or --sslv3 (SSL) силы завиток использовать SSL версии 3 при подключении с удаленного сервера Ssl

-p or --proxytunnel если у вас есть -x or --proxy этот параметр приведет к тому, что протоколы, отличные от http, будут пытаться туннелировать через прокси вместо того, чтобы просто использовать его для выполнения подобных http-операций.

-v or --verbose, если вам нужно многословный

--ftp-ssl

Смежные вопросы