Найти - Пользователи
Полная версия: Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1
Начало » Network » Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1
1 2 3 4
py.user.next
shuhart
малые файлы портятся тоже
50 метров, 10 метров, 5 метров ?
Надо определить минимальный, если он вообще есть.
shuhart
py.user.next
50 метров, 10 метров, 5 метров ?
Надо определить минимальный, если он вообще есть.
Эх… 5Мб - портится, 1Мб - портится, 7B (текстовый, 7 символов, UTF без BOM) - не портится, 1B (текстовый, 1 символ, UTF без BOM) - не портится.
Не понятно только, что это даст.
py.user.next
shuhart
1Мб - портится
Вот на таком и тестируй.

shuhart
FileReader(open(source_file, 'rb'))
Вынеси это из вызова. Причём open() тоже надо вынести.
FileReader() должен создаваться до
c = pycurl.Curl()
и уничтожаться после
c.close()

shuhart
Не понятно только, что это даст.
Ну, как минимум стало ясно, что эта информация неверна
shuhart
Привет всем!
Обнаружилась проблема в следующей задаче: загрузка файлов размером более 1Гб на ftp находясь за squid прокси. Файлы меньшего размера загружаются без проблем.
И к тому же теперь для тестирования не надо грузить по гигабайту каждый раз, чтобы проверить, исправлена ли ошибка.
shuhart
py.user.next
Ну, как минимум стало ясно, что эта информация неверна
Согласен.
На момент создания поста проблема обрезания файла была не замечена, т.к. файлы более 1Гб вообще не загружались, и все сводилось к решению этой проблемы. Это потом уже, при чем совершенно случайно, обнаружилось.
Попробую проверить, как посоветовали. Спасибо.
PooH
А если убрать c.setopt(pycurl.HTTPPROXYTUNNEL, 1) какой результат?
shuhart
PooH
А если убрать c.setopt(pycurl.HTTPPROXYTUNNEL, 1) какой результат?
Этот параметр обязателен при работе с http-прокси, которым и является squid. Без него pycurl работать со squid не сможет.

Немного переделал скрипт, пока тестировал.
# -*- coding: utf-8 -*-
import os, sys
import pycurl
ftp_user_name = "***"
ftp_user_password = "***"
proxy = "***"
proxy_port = ***
proxy_user_name = "***"
proxy_user_password = "***"
ftp_destination = "***"
source_file = "***"
if not os.path.exists(source_file):
    print("Error: the file '%s' does not exist" % source_file)
    raise SystemExit
pycurl.global_init(pycurl.GLOBAL_WIN32)
c = pycurl.Curl()
c.setopt(c.URL, ftp_destination)
c.setopt(c.PROXY, "%s:%s" % (proxy, proxy_port))
c.setopt(c.PROXYUSERPWD, "%s:%s" % (proxy_user_name, proxy_user_password))
c.setopt(c.HTTPPROXYTUNNEL, 1)
c.setopt(c.UPLOAD, 1)
c.setopt(c.USERPWD, "%s:%s" % (ftp_user_name, ftp_user_password))
c.setopt(c.VERBOSE, 0)
c.setopt(c.NOPROGRESS, 0)
with open(source_file, "rb") as file:
    c.setopt(c.READDATA, file)
    c.setopt(c.INFILESIZE, os.path.getsize(source_file))
    print("Uploading file %s to url %s" % (source_file, ftp_destination))
    try:
        c.perform()
    except Exception, err:
        print "Error: %s" % err
c.close()
Результат не изменился. Файлы обрезаются. Удивительно, pycurl выдает, что файл загружен полностью. На приложенном скрине - результат загрузки файла в 5Мб.
py.user.next
Исключи из скрипта прокси-сервер (закомментируй опции), оставив всё остальное, и проверь на том же или другом ftp-сервере с тем же файлом.
shuhart
py.user.next
Исключи из скрипта прокси-сервер (закомментируй опции), оставив всё остальное, и проверь на том же или другом ftp-сервере с тем же файлом.
Всё это уже давно проверено. Сквозняком, без прокси, любой файл загружается корректно.
Но задача стоит именно в том, что бы работать находясь за squid. Удивляет, что, например, встроенный ftp-клиент TotalCommander в этих условиях копирует файл корректно. В каком режиме он работает? Почему так не может работать pycurl? Не задан какой-то параметр? Или TotalCommander реализует какую-то верификацию при копировании? Вопросов много.
i.slepov
shuhart
. В каком режиме он работает? Почему так не может работать pycurl? Не задан какой-то параметр?

На все вопросы один ответ: wireshark
py.user.next
shuhart
Всё это уже давно проверено. Сквозняком, без прокси, любой файл загружается корректно.
Проверил это? Я не могу полагаться на то, что ты говоришь, потому что ты в начале говорил одно, а там оказалось совсем другое.
Если точно не диагностировать проблему, то появляется куча левых решений вроде этих таймаутов, которые никакого отношения к этому всему не имеют.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB