سؤال
أحاول استخدام 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()
كلما قمت بتشغيل هذا الأمر ، فهذا يحاول استرداد القائمة. أيه أفكار؟
المحلول
على الأرجح تعارض بين الوضع النشط والسلبي. تأكد من أن أحد ما يلي صحيح:
- يدعم الخادم وضع PASV وعميلك يقوم بتعيين وضع PASV
- إذا كان الخادم لا يدعم الوضع السلبي ، فيجب أن يدعم جدار الحماية الخاص بك عمليات نقل FTP النشط.
تحرير: نظرت إلى المستندات ، ووجدت أنه في Python 2.1 وبعد ذلك يكون الافتراضي الوضع السلبي. ما الخادم الذي تتحدث إليه ، وأنت تعرف ما إذا كان يدعم الوضع السلبي؟
في الوضع النشط (غير PASV) يرسل العميل أمر منفذ يطلب من الخادم بدء اتصال البيانات على هذا المنفذ ، والذي يتطلب جدار الحماية الخاص بك أن يكون على دراية بأمر المنفذ حتى يتمكن من إعادة توجيه اتصال البيانات الوارد إليك-القليل من جدران الحماية. دعم هذا. في الوضع السلبي ، يفتح العميل اتصال البيانات ويستخدمه الخادم (الخادم "سلبي" في فتح اتصال البيانات).
فقط في حال كنت لا تستخدم الوضع السلبي ، قم ftp.set_pasv(True)
ومعرفة ما إذا كان هذا يحدث فرقا.
نصائح أخرى
إذا فشل الوضع السلبي لسبب ما حاول:
ftp.set_pasv(False)
لاستخدام الوضع النشط.