cURL (pycurl) FTP через HTTP прокси - PullRequest
       11

cURL (pycurl) FTP через HTTP прокси

3 голосов
/ 06 февраля 2012

Я пишу простой скрипт загрузки и просто перехватил следующую вещь: curl пытается сделать PUT на ftp сервере:

Упрощенный код:

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

Почему?Что я пропустил?

Ответы [ 2 ]

2 голосов
/ 24 марта 2014

Вот формат, который мне подходит.

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

Я потратил много времени на борьбу с этими параметрами, дайте мне знать, если у вас есть проблема с curl как 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.

--digest удаленный ftp с использованием дайджест-аутентификации

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

-3 or --sslv3 (SSL) Принудительно устанавливает curl для использования SSL версии 3 при подключениис удаленным ssl-сервером

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

-v or --verbose если вам нужно подробное

--ftp-ssl

0 голосов
/ 15 марта 2012

Синтаксис для загрузки по ftp:

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/
...