Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1 [RSS Feed]

#1 Сен. 16, 2015 12:02:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

shuhart
малые файлы портятся тоже
50 метров, 10 метров, 5 метров ?
Надо определить минимальный, если он вообще есть.



Офлайн

#2 Сен. 16, 2015 12:15:53

shuhart
Зарегистрирован: 2015-09-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

py.user.next
50 метров, 10 метров, 5 метров ?
Надо определить минимальный, если он вообще есть.
Эх… 5Мб - портится, 1Мб - портится, 7B (текстовый, 7 символов, UTF без BOM) - не портится, 1B (текстовый, 1 символ, UTF без BOM) - не портится.
Не понятно только, что это даст.

Отредактировано shuhart (Сен. 16, 2015 12:56:19)

Офлайн

#3 Сен. 16, 2015 12:59:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

shuhart
1Мб - портится
Вот на таком и тестируй.

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

shuhart
Не понятно только, что это даст.
Ну, как минимум стало ясно, что эта информация неверна
shuhart
Привет всем!
Обнаружилась проблема в следующей задаче: загрузка файлов размером более 1Гб на ftp находясь за squid прокси. Файлы меньшего размера загружаются без проблем.
И к тому же теперь для тестирования не надо грузить по гигабайту каждый раз, чтобы проверить, исправлена ли ошибка.



Отредактировано py.user.next (Сен. 16, 2015 13:02:07)

Офлайн

#4 Сен. 16, 2015 13:13:10

shuhart
Зарегистрирован: 2015-09-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

py.user.next
Ну, как минимум стало ясно, что эта информация неверна
Согласен.
На момент создания поста проблема обрезания файла была не замечена, т.к. файлы более 1Гб вообще не загружались, и все сводилось к решению этой проблемы. Это потом уже, при чем совершенно случайно, обнаружилось.
Попробую проверить, как посоветовали. Спасибо.

Офлайн

#5 Сен. 16, 2015 14:08:35

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

А если убрать c.setopt(pycurl.HTTPPROXYTUNNEL, 1) какой результат?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Сен. 16, 2015 15:38:22

shuhart
Зарегистрирован: 2015-09-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

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Мб.

Отредактировано shuhart (Сен. 16, 2015 15:48:28)

Прикреплённый файлы:
attachment diff02.PNG (3,4 KБ)

Офлайн

#7 Сен. 17, 2015 02:46:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

Исключи из скрипта прокси-сервер (закомментируй опции), оставив всё остальное, и проверь на том же или другом ftp-сервере с тем же файлом.



Отредактировано py.user.next (Сен. 17, 2015 02:47:17)

Офлайн

#8 Сен. 17, 2015 07:09:13

shuhart
Зарегистрирован: 2015-09-08
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

py.user.next
Исключи из скрипта прокси-сервер (закомментируй опции), оставив всё остальное, и проверь на том же или другом ftp-сервере с тем же файлом.
Всё это уже давно проверено. Сквозняком, без прокси, любой файл загружается корректно.
Но задача стоит именно в том, что бы работать находясь за squid. Удивляет, что, например, встроенный ftp-клиент TotalCommander в этих условиях копирует файл корректно. В каком режиме он работает? Почему так не может работать pycurl? Не задан какой-то параметр? Или TotalCommander реализует какую-то верификацию при копировании? Вопросов много.

Офлайн

#9 Сен. 17, 2015 09:08:22

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

shuhart
. В каком режиме он работает? Почему так не может работать pycurl? Не задан какой-то параметр?

На все вопросы один ответ: wireshark

Офлайн

#10 Сен. 18, 2015 02:31:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1

shuhart
Всё это уже давно проверено. Сквозняком, без прокси, любой файл загружается корректно.
Проверил это? Я не могу полагаться на то, что ты говоришь, потому что ты в начале говорил одно, а там оказалось совсем другое.
Если точно не диагностировать проблему, то появляется куча левых решений вроде этих таймаутов, которые никакого отношения к этому всему не имеют.



Отредактировано py.user.next (Сен. 18, 2015 02:35:14)

Офлайн

  • Начало
  • » Network
  • » Загрузка больших файлов на ftp через squid с авторизацией с использованием pycurl 7.19.5.1[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version