سؤال

أحاول استخدام FTPLIB للحصول على قائمة ملفات وتنزيل أي ملفات جديدة منذ آخر شيك. الرمز الذي أحاول تشغيله حتى الآن هو:

#!/usr/bin/env python
from ftplib import FTP
import sys

host = 'ftp.***.com'
user = '***'
passwd = '***'

try:
    ftp = FTP(host)
    ftp.login(user, passwd)
except:
    print 'Error connecting to FTP server'
    sys.exit()

try:
    ftp.retrlines('LIST')
except:
    print 'Error fetching file listing'
    ftp.quit()
    sys.exit()

ftp.quit() 

كلما قمت بتشغيل هذا الأمر ، فهذا يحاول استرداد القائمة. أيه أفكار؟

هل كانت مفيدة؟

المحلول

على الأرجح تعارض بين الوضع النشط والسلبي. تأكد من أن أحد ما يلي صحيح:

  1. يدعم الخادم وضع PASV وعميلك يقوم بتعيين وضع PASV
  2. إذا كان الخادم لا يدعم الوضع السلبي ، فيجب أن يدعم جدار الحماية الخاص بك عمليات نقل FTP النشط.

تحرير: نظرت إلى المستندات ، ووجدت أنه في Python 2.1 وبعد ذلك يكون الافتراضي الوضع السلبي. ما الخادم الذي تتحدث إليه ، وأنت تعرف ما إذا كان يدعم الوضع السلبي؟

في الوضع النشط (غير PASV) يرسل العميل أمر منفذ يطلب من الخادم بدء اتصال البيانات على هذا المنفذ ، والذي يتطلب جدار الحماية الخاص بك أن يكون على دراية بأمر المنفذ حتى يتمكن من إعادة توجيه اتصال البيانات الوارد إليك-القليل من جدران الحماية. دعم هذا. في الوضع السلبي ، يفتح العميل اتصال البيانات ويستخدمه الخادم (الخادم "سلبي" في فتح اتصال البيانات).

فقط في حال كنت لا تستخدم الوضع السلبي ، قم ftp.set_pasv(True) ومعرفة ما إذا كان هذا يحدث فرقا.

نصائح أخرى

إذا فشل الوضع السلبي لسبب ما حاول:

ftp.set_pasv(False)

لاستخدام الوضع النشط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top