ftplib --- کلاینت پروتکل FTP¶
کد منبع: Lib/ftplib.py
این ماژول، کلاس FTP و چند آیتم مرتبط را تعریف میکند. کلاس FTP سمت کلاینت پروتکل FTP را پیادهسازی میکند. شما میتوانید از آن برای نوشتن برنامههای پایتون استفاده کنید که انواع مختلفی از وظایف خودکار FTP را انجام میدهند، مانند آینهسازی سایر سرورهای FTP. همچنین توسط ماژول urllib.request برای مدیریت URLهایی که از FTP استفاده میکنند، استفاده میشود. برای اطلاعات بیشتر درباره FTP (پروتکل انتقال پرونده)، سند اینترنتی RFC 959 را ببینید.
کدگذاری پیشفرض UTF-8 است، مطابق با RFC 2640.
دسترسپذیری: not WASI.
این ماژول در WebAssembly کار نمیکند یا در دسترس نیست. برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.
در اینجا یک نشست نمونه با استفاده از ماژول ftplib آمده است:
>>> from ftplib import FTP
>>> ftp = FTP('ftp.us.debian.org') # connect to host, default port
>>> ftp.login() # user anonymous, passwd anonymous@
'230 Login successful.'
>>> ftp.cwd('debian') # change into "debian" directory
'250 Directory successfully changed.'
>>> ftp.retrlines('LIST') # list directory contents
-rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README
...
drwxr-sr-x 5 1176 1176 4096 Dec 19 2000 pool
drwxr-sr-x 4 1176 1176 4096 Nov 17 2008 project
drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools
'226 Directory send OK.'
>>> with open('README', 'wb') as fp:
>>> ftp.retrbinary('RETR README', fp.write)
'226 Transfer complete.'
>>> ftp.quit()
'221 Goodbye.'
مرجع¶
اشیای FTP¶
- class ftplib.FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None, *, encoding='utf-8')¶
یک نمونه جدید از کلاس
FTPبرمیگرداند.- پارامترها:
host (str) -- نام میزبان برای اتصال. اگر ارائه شود،
connect(host)بهطور ضمنی توسط سازنده فراخوانی میشود.user (str) -- The username to log in with (default:
'anonymous'). در صورت ارائه،login(host, passwd, acct)بهطور ضمنی توسط سازنده فراخوانی میشود.passwd (str) -- The password to use when logging in. If not given, and if passwd is the empty string or
"-", a password will be automatically generated.acct (str) -- Account information to be used for the
ACCTFTP command. Few systems implement this. See RFC-959 for more details.timeout (float | None) -- مهلت زمانی به ثانیه برای عملیاتهای مسدودکننده مانند
connect()(پیشفرض: تنظیم مهلت زمانی پیشفرض سراسری).source_address (tuple | None) -- A 2-tuple
(host, port)for the socket to bind to as its source address before connecting.encoding (str) -- The encoding for directories and filenames (default:
'utf-8').
کلاس
FTPاز دستورwithپشتیبانی میکند، برای مثال:>>> from ftplib import FTP >>> with FTP("ftp1.at.proftpd.org") as ftp: ... ftp.login() ... ftp.dir() ... '230 Anonymous login ok, restrictions apply.' dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 . dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .. dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora >>>
تغییر یافته در نسخهی 3.2: پشتیبانی از دستور
withافزوده شد.تغییر یافته در نسخهی 3.3: پارامتر source_address افزوده شد.
تغییر یافته در نسخهی 3.9: اگر پارامتر timeout روی صفر تنظیم شود، برای جلوگیری از ایجاد یک سوکت غیرمسدودکننده،
ValueErrorپرتاب خواهد شد. پارامتر encoding افزوده شد و مقدار پیشفرض از Latin-1 به UTF-8 تغییر یافت تا از RFC 2640 پیروی شود.چندین متد
FTPدر دو گونه در دسترس هستند: یکی برای کار با پروندههای متنی و دیگری برای پروندههای دودویی. این متدها به نام دستور مورد استفاده، بهدنبالlinesبرای نسخهی متنی یاbinaryبرای نسخهی دودویی نامگذاری شدهاند.نمونههای
FTPدارای متدهای زیر هستند:- set_debuglevel(level)¶
سطح اشکالزدایی نمونه را بهعنوان یک
intتنظیم کنید. این موضوع میزان خروجی اشکالزدایی چاپشده را کنترل میکند. سطوح اشکالزدایی عبارتند از:0(پیشفرض): بدون خروجی اشکالزدایی.1: مقدار متوسطی از خروجی اشکالزدایی تولید میکند، معمولاً یک خط به ازای هر درخواست.2یا بالاتر: بیشترین مقدار خروجی اشکالزدایی تولید میکند و هر خط ارسالشده و دریافتشده روی اتصال کنترل را ثبت میکند.
- connect(host='', port=0, timeout=None, source_address=None)¶
به میزبان و پورت دادهشده متصل میشود. این تابع باید فقط یک بار برای هر نمونه فراخوانی شود؛ اگر هنگام ایجاد نمونه
FTPآرگومان host داده شده باشد، نباید فراخوانی شود. سایر متدهایFTPرا تنها پس از برقراری موفق اتصال میتوان فراخوانی کرد.- پارامترها:
host (str) -- میزبانی که باید به آن متصل شوید.
port (int) -- پورت TCP برای اتصال (پیشفرض:
21، همانطور که در مشخصات پروتکل FTP آمده است). بهندرت لازم است شماره پورت متفاوتی را مشخص کنید.timeout (float | None) -- یک مهلت زمانی بر حسب ثانیه برای تلاش اتصال (پیشفرض: تنظیم مهلت پیشفرض سراسری).
source_address (tuple | None) -- A 2-tuple
(host, port)for the socket to bind to as its source address before connecting.
یک رویداد حسابرسی
ftplib.connectرا با آرگومانهایself،hostوportپرتاب میکند.تغییر یافته در نسخهی 3.3: پارامتر source_address افزوده شد.
- getwelcome()¶
پیام خوشآمدگویی ارسالشده از سوی سرور در پاسخ به اتصال اولیه را بازمیگرداند. (این پیام گاهی شامل موارد سلب مسئولیت یا اطلاعات راهنمایی است که ممکن است برای کاربر مرتبط باشد.)
- login(user='anonymous', passwd='', acct='')¶
به سرور FTP متصلشده وارد شوید. این تابع باید فقط یک بار برای هر نمونه، پس از برقراری اتصال فراخوانی شود؛ اگر آرگومانهای host و user هنگام ایجاد نمونهی
FTPداده شده باشند، نباید فراخوانی شود. بیشتر دستورات FTP فقط پس از ورود کلاینت مجاز هستند.- پارامترها:
user (str) -- The username to log in with (default:
'anonymous').passwd (str) -- The password to use when logging in. If not given, and if passwd is the empty string or
"-", a password will be automatically generated.acct (str) -- Account information to be used for the
ACCTFTP command. Few systems implement this. See RFC-959 for more details.
- abort()¶
انتقال پروندهای را که در حال انجام است قطع کنید. استفاده از این همیشه کارساز نیست، اما ارزش امتحان کردن دارد.
- sendcmd(cmd)¶
یک رشته فرمان ساده را به سرور ارسال کنید و رشته پاسخ را برگردانید.
یک رویداد حسابرسی
ftplib.sendcmdرا با آرگومانهایselfوcmdپرتاب میکند.
- voidcmd(cmd)¶
یک رشتهی فرمان ساده را به سرور ارسال کنید و پاسخ را مدیریت کنید. اگر کد پاسخ متناظر با موفقیت باشد (کدها در بازهی ۲۰۰ تا ۲۹۹)، رشتهی پاسخ را برگردانید. در غیر این صورت
error_replyرا پرتاب کنید.یک رویداد حسابرسی
ftplib.sendcmdرا با آرگومانهایselfوcmdپرتاب میکند.
- retrbinary(cmd, callback, blocksize=8192, rest=None)¶
دریافت یک پرونده در حالت انتقال دودویی.
- پارامترها:
cmd (str) -- یک دستور
RETRمناسب:"RETR filename".callback (callable) -- یک شیء فراخوانیپذیر با یک پارامتر که برای هر بلوک دادهی دریافتی فراخوانی میشود و تنها آرگومان آن، داده به صورت
bytesاست.blocksize (int) -- حداکثر اندازه تکه برای خواندن از شیء
socketسطح پایین که برای انجام انتقال واقعی ایجاد شده است. این مقدار همچنین متناظر با بیشترین اندازه دادهای است که به callback ارسال میشود. مقدار پیشفرض آن8192است.rest (int) -- یک دستور
RESTبرای ارسال به سرور. مستندات پارامتر rest متدtransfercmd()را مشاهده کنید.
- retrlines(cmd, callback=None)¶
یک پرونده یا فهرست پوشه را با کدگذاری مشخصشده توسط پارامتر encoding در زمان مقداردهی اولیه بازیابی کنید. cmd باید یک فرمان
RETRمناسب باشد (بهretrbinary()مراجعه کنید) یا فرمانی مانندLISTیاNLST(معمولاً فقط رشته'LIST').LISTفهرستی از پروندهها و اطلاعات مربوط به آن پروندهها را بازیابی میکند.NLSTفهرستی از نام پروندهها را بازیابی میکند. تابع callback برای هر خط با یک آرگومان رشتهای حاوی همان خط بدون CRLF پایانی فراخوانی میشود. callback پیشفرض خط را درsys.stdoutچاپ میکند.
- set_pasv(val)¶
اگر val درست باشد، حالت «passive» را فعال کنید، در غیر این صورت حالت passive را غیرفعال کنید. حالت passive بهطور پیشفرض فعال است.
- storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)¶
یک پرونده را در حالت انتقال دودویی ذخیره کنید.
- پارامترها:
cmd (str) -- یک فرمان
STORمناسب:"STOR filename".fp (file object) -- یک شیء پرونده (بازشده در حالت دودویی) که تا EOF، با استفاده از متد
read()خود و در بلوکهایی به اندازهی blocksize خوانده میشود تا دادههای موردنیاز برای ذخیره را فراهم کند.blocksize (int) -- اندازهی بلوک خواندن. پیشفرض آن
8192است.callback (callable) -- یک فراخوانیپذیر با یک پارامتر که برای هر بلوک دادهی ارسالی فراخوانی میشود و تنها آرگومان آن داده بهصورت
bytesاست.rest (int) -- یک دستور
RESTبرای ارسال به سرور. مستندات پارامتر rest متدtransfercmd()را مشاهده کنید.
تغییر یافته در نسخهی 3.2: پارامتر rest افزوده شد.
- storlines(cmd, fp, callback=None)¶
یک پرونده را در حالت سطری ذخیره میکند. cmd باید یک دستور
STORمناسب باشد (بهstorbinary()مراجعه کنید). سطرها تا EOF از file object fp (که در حالت دودویی باز شده است) با استفاده از متدreadline()آن خوانده میشوند تا دادههای موردنیاز برای ذخیره فراهم شوند. callback یک کالبک اختیاری با یک پارامتر است که پس از ارسال هر خط، برای آن خط فراخوانی میشود.
- transfercmd(cmd, rest=None)¶
یک انتقال را بر روی اتصال داده آغاز میکند. اگر انتقال فعال باشد، یک فرمان
EPRTیاPORTو فرمان انتقال مشخصشده با cmd را ارسال میکند و اتصال را میپذیرد. اگر سرور غیرفعال باشد، یک فرمانEPSVیاPASVرا ارسال میکند، به آن متصل میشود و فرمان انتقال را آغاز میکند. در هر صورت، سوکت اتصال را برمیگرداند.اگر آرگومان اختیاری rest داده شود، یک دستور
RESTبه سرور ارسال میشود و rest بهعنوان آرگومان به آن گذرانده میشود. rest معمولاً یک آفست بایتی در پرونده درخواستی است و به سرور میگوید که ارسال بایتهای پرونده را از آفست درخواستی از سر بگیرد و بایتهای ابتدایی را رد کند. با این حال توجه داشته باشید که متدtransfercmd()، rest را با پارامتر encoding مشخصشده در مقداردهی اولیه به یک رشته تبدیل میکند، اما هیچ بررسیای روی محتوای رشته انجام نمیشود. اگر سرور دستورRESTرا نشناسد، استثنایerror_replyپرتاب خواهد شد. اگر این اتفاق افتاد، کافی استtransfercmd()را بدون آرگومان rest فراخوانی کنید.
- ntransfercmd(cmd, rest=None)¶
مانند
transfercmd()، اما تاپلی از اتصال داده و اندازهی مورد انتظار داده برمیگرداند. اگر اندازهی مورد انتظار قابل محاسبه نباشد،Noneبهعنوان اندازهی مورد انتظار بازگردانده میشود. cmd و rest همان معنایی را دارند که درtransfercmd()دارند.
- mlsd(path='', facts=[])¶
فهرست کردن یک پوشه در قالبی استاندارد با استفاده از دستور
MLSD(RFC 3659). اگر path حذف شود، پوشه فعلی فرض میشود. facts فهرستی از رشتهها است که نوع اطلاعات مورد نظر را نشان میدهد (مثلاً["type", "size", "perm"]). یک شیء تولیدگر برمیگرداند که برای هر پرونده یافتشده در مسیر، یک تاپلبا دو المان تولید میکند. المان اول نام پرونده است، المان دوم یک دیکشنری حاوی اطلاعاتی درباره نام پرونده است. محتوای این دیکشنری ممکن است با آرگومان facts محدود شود، اما تضمینی نیست که سرور تمام اطلاعات درخواستشده را برگرداند.اضافه شده در نسخهی 3.3.
- nlst(argument[, ...])¶
فهرستی از نام پروندهها را، همانگونه که توسط فرمان
NLSTبرگردانده میشود، برمیگرداند. آرگومان اختیاری، پوشهای برای فهرست کردن است (پیشفرض، پوشهی جاری سرور است). میتوان از آرگومانهای متعدد برای ارسال گزینههای غیراستاندارد به فرمانNLSTاستفاده کرد.توجه
اگر سرور شما از این فرمان پشتیبانی کند،
mlsd()API بهتری ارائه میدهد.
- dir(argument[, ...])¶
فهرستی از پوشه را مانند آنچه دستور
LISTبرمیگرداند تولید میکند و آن را در خروجی استاندارد چاپ میکند. آرگومان اختیاری، پوشهای برای فهرست کردن است (پیشفرض، پوشهی جاری سرور است). میتوان از آرگومانهای متعدد برای ارسال گزینههای غیراستاندارد به دستورLISTاستفاده کرد. اگر آخرین آرگومان یک تابع باشد، از آن بهعنوان تابع کالبک مانندretrlines()استفاده میشود؛ در حالت پیشفرض درsys.stdoutچاپ میشود. این متدNoneرا برمیگرداند.توجه
اگر سرور شما از این فرمان پشتیبانی کند،
mlsd()API بهتری ارائه میدهد.
- rename(fromname, toname)¶
نام پرونده fromname را روی سرور به toname تغییر میدهد.
- delete(filename)¶
پروندهای به نام filename را از سرور حذف میکند. در صورت موفقیت، متن پاسخ را برمیگرداند؛ در غیر این صورت، در خطاهای دسترسی
error_permیا در سایر خطاهاerror_replyرا پرتاب میکند.
- cwd(pathname)¶
پوشه جاری را روی سرور تنظیم میکند.
- mkd(pathname)¶
یک پوشهی جدید روی سرور ایجاد کنید.
- pwd()¶
مسیر پوشهی فعلی روی سرور را برمیگرداند.
- rmd(dirname)¶
پوشهای به نام dirname را روی سرور حذف کنید.
- size(filename)¶
اندازه پروندهای به نام filename را از سرور درخواست میکند. در صورت موفقیت، اندازه پرونده بهعنوان یک عدد صحیح برگردانده میشود، در غیر این صورت
Noneبرگردانده میشود. توجه داشته باشید که دستورSIZEاستانداردسازی نشده است، اما توسط بسیاری از پیادهسازیهای رایج سرور پشتیبانی میشود.
اشیای FTP_TLS¶
- class ftplib.FTP_TLS(host='', user='', passwd='', acct='', *, context=None, timeout=None, source_address=None, encoding='utf-8')¶
زیرکلاسی از
FTPکه پشتیبانی از TLS را مطابق RFC 4217 به FTP میافزاید. هنگام اتصال به پورت ۲۱، اتصال کنترلی FTP را پیش از احراز هویت بهطور ضمنی ایمن میکند.توجه
کاربر باید با فراخوانی متد
prot_p()، اتصال داده را بهصراحت ایمن کند.- پارامترها:
host (str) -- نام میزبان برای اتصال. اگر ارائه شود،
connect(host)بهطور ضمنی توسط سازنده فراخوانی میشود.user (str) -- The username to log in with (default:
'anonymous'). در صورت ارائه،login(host, passwd, acct)بهطور ضمنی توسط سازنده فراخوانی میشود.passwd (str) -- The password to use when logging in. If not given, and if passwd is the empty string or
"-", a password will be automatically generated.acct (str) -- Account information to be used for the
ACCTFTP command. Few systems implement this. See RFC-959 for more details.context (
ssl.SSLContext) -- یک شیء زمینه SSL که امکان گردآوری گزینههای پیکربندی SSL، گواهیها و کلیدهای خصوصی را در یک ساختار واحد و احتمالاً طولانیمدت فراهم میکند. لطفاً برای بهترین شیوهها، ملاحظات امنیتی را بخوانید.timeout (float | None) -- مهلت زمانی بر حسب ثانیه برای عملیاتهای مسدودکننده مانند
connect()(پیشفرض: تنظیم پیشفرض سراسری مهلت زمانی).source_address (tuple | None) -- A 2-tuple
(host, port)for the socket to bind to as its source address before connecting.encoding (str) -- The encoding for directories and filenames (default:
'utf-8').
اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.3: پارامتر source_address افزوده شد.
تغییر یافته در نسخهی 3.4: این کلاس اکنون از بررسی نام میزبان با
ssl.SSLContext.check_hostnameو نشانگر نام سرور (Server Name Indication) پشتیبانی میکند (بهssl.HAS_SNIمراجعه کنید).تغییر یافته در نسخهی 3.9: اگر پارامتر timeout روی صفر تنظیم شود، برای جلوگیری از ایجاد یک سوکت غیرمسدودکننده،
ValueErrorپرتاب خواهد شد. پارامتر encoding افزوده شد و مقدار پیشفرض از Latin-1 به UTF-8 تغییر یافت تا از RFC 2640 پیروی شود.تغییر یافته در نسخهی 3.12: پارامترهای منسوخ keyfile و certfile حذف شدهاند.
در ادامه یک نشست نمونه با استفاده از کلاس
FTP_TLSآمده است:>>> ftps = FTP_TLS('ftp.pureftpd.org') >>> ftps.login() '230 Anonymous user logged in' >>> ftps.prot_p() '200 Data protection level set to "private"' >>> ftps.nlst() ['6jack', 'OpenBSD', 'antilink', 'blogbench', 'bsdcam', 'clockspeed', 'djbdns-jedi', 'docs', 'eaccelerator-jedi', 'favicon.ico', 'francotone', 'fugu', 'ignore', 'libpuzzle', 'metalog', 'minidentd', 'misc', 'mysql-udf-global-user-variables', 'php-jenkins-hash', 'php-skein-hash', 'php-webdav', 'phpaudit', 'phpbench', 'pincaster', 'ping', 'posto', 'pub', 'public', 'public_keys', 'pure-ftpd', 'qscan', 'qtc', 'sharedance', 'skycache', 'sound', 'tmp', 'ucarp']
کلاس
FTP_TLSازFTPارث میبرد و این متدها و ویژگیهای اضافی را تعریف میکند:- ssl_version¶
نسخهی SSL برای استفاده (بهطور پیشفرض
ssl.PROTOCOL_SSLv23).
- auth()¶
بسته به آنچه در ویژگی
ssl_versionمشخص شده است، با استفاده از TLS یا SSL یک اتصال کنترلی امن برقرار کنید.تغییر یافته در نسخهی 3.4: این متد اکنون از بررسی نام میزبان با
ssl.SSLContext.check_hostnameو Server Name Indication پشتیبانی میکند (بهssl.HAS_SNIمراجعه کنید).
- ccc()¶
کانال کنترل را به متن آشکار بازمیگرداند. این میتواند برای بهرهگیری از فایروالهایی که میدانند چگونه NAT را با FTP غیرامن بدون باز کردن پورتهای ثابت مدیریت کنند، مفید باشد.
اضافه شده در نسخهی 3.3.
- prot_p()¶
اتصال امن داده را راهاندازی کنید.
- prot_c()¶
اتصال دادهی متن آشکار (clear text) را برقرار کنید.
متغیرهای ماژول¶
- exception ftplib.error_reply¶
استثنایی که هنگام دریافت پاسخی غیرمنتظره از سرور پرتاب میشود.
- exception ftplib.error_temp¶
استثنایی که هنگام دریافت کد خطایی که نشاندهندهی یک خطای موقت است (کدهای پاسخ در بازهی ۴۰۰--۴۹۹) پرتاب میشود.
- exception ftplib.error_perm¶
استثنایی که هنگام دریافت کد خطایی که نشاندهنده خطای دائمی است (کدهای پاسخ در بازه ۵۰۰--۵۹۹) پرتاب میشود.
- exception ftplib.error_proto¶
استثنایی که هنگامی پرتاب میشود که پاسخی از سرور دریافت شود که با مشخصات پاسخ پروتکل انتقال پرونده مطابقت ندارد، یعنی با رقمی در بازهی ۱--۵ آغاز نمیشود.
- ftplib.all_errors¶
مجموعهی تمام استثناها (بهصورت یک تاپل ) که متدهای نمونههای
FTPممکن است آنها را در اثر مشکلات اتصال FTP (در مقابل خطاهای برنامهنویسی ایجادشده توسط فراخواننده) پرتاب کنند. این مجموعه شامل چهار استثنای فهرستشده در بالا و همچنینOSErrorوEOFErrorاست.
همچنین ملاحظه نمائید
- ماژول
netrc پارسری برای قالب پرونده
.netrc. پرونده.netrcمعمولاً توسط کلاینتهای FTP برای بارگذاری اطلاعات احراز هویت کاربر پیش از پرسش از کاربر استفاده میشود.