GeezerVison is showing python.github.io — http.client --- کلاینت پروتکل HTTP
http.client --- کلاینت پروتکل HTTP¶
کد منبع: Lib/http/client.py
این ماژول کلاسهایی را تعریف میکند که سمت کلاینت پروتکلهای HTTP و HTTPS را پیادهسازی میکنند. این ماژول معمولاً بهطور مستقیم استفاده نمیشود — ماژول urllib.request از آن برای مدیریت URLهایی که از HTTP و HTTPS استفاده میکنند، استفاده میکند.
همچنین ببینید
برای یک رابط کلاینت HTTP سطح بالاتر، بسته Requests توصیه میشود.
نکته
پشتیبانی از HTTPS تنها در صورتی در دسترس است که پایتون با پشتیبانی از SSL کامپایل شده باشد (از طریق ماژول ssl).
این ماژول کلاسهای زیر را فراهم میکند:
-
class http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None, blocksize=8192, max_response_headers=None)¶
یک نمونهی HTTPConnection نمایانگر یک تراکنش با یک سرور HTTP است. این کلاس باید با ارسال یک میزبان و شماره پورت اختیاری مقداردهی اولیه شود. اگر هیچ شماره پورتی ارسال نشود، پورت از رشتهی میزبان استخراج میشود (اگر دارای قالب host:port باشد)، در غیر این صورت از پورت پیشفرض HTTP (یعنی ۸۰) استفاده میشود. اگر پارامتر اختیاری timeout داده شود، عملیات مسدودکننده (مانند تلاش برای اتصال) پس از گذشت آن تعداد ثانیه متوقف خواهند شد (اگر داده نشود، از تنظیم مهلت زمانی پیشفرض سراسری استفاده میشود). پارامتر اختیاری source_address میتواند یک چندتایی از (میزبان، پورت) باشد تا بهعنوان آدرس مبدأیی که اتصال HTTP از آن برقرار میشود استفاده شود. پارامتر اختیاری blocksize اندازهی بافر را بر حسب بایت برای ارسال بدنهی پیامی شبیه به پرونده تنظیم میکند. پارامتر اختیاری max_response_headers حداکثر تعداد سرآیندهای پاسخ مجاز را برای کمک به جلوگیری از حملات انکار خدمت تنظیم میکند، در غیر این صورت از مقدار پیشفرض (۱۰۰) استفاده میشود.
برای مثال، فراخوانیهای زیر همگی نمونههایی ایجاد میکنند که به سرور در همان میزبان و پورت متصل میشوند:
>>> h1 = http.client.HTTPConnection('www.python.org')
>>> h2 = http.client.HTTPConnection('www.python.org:80')
>>> h3 = http.client.HTTPConnection('www.python.org', 80)
>>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)
تغییر یافته در نسخهی 3.2: source_address افزوده شد.
تغییر یافته در نسخهی 3.4: پارامتر strict حذف شده است. «پاسخهای ساده» به سبک HTTP 0.9 دیگر پشتیبانی نمیشوند.
تغییر یافته در نسخهی 3.7: پارامتر blocksize افزوده شد.
تغییر یافته در نسخهی 3.15: پارامتر max_response_headers اضافه شد.
-
class http.client.HTTPSConnection(host, port=None, *, [timeout, ]source_address=None, context=None, blocksize=8192, max_response_headers=None)¶
زیرکلاسی از HTTPConnection که از SSL برای ارتباط با سرورهای امن استفاده میکند. پورت پیشفرض 443 است. اگر context مشخص شده باشد، باید نمونهای از ssl.SSLContext باشد که گزینههای مختلف SSL را توصیف میکند.
برای اطلاعات بیشتر درباره بهترین شیوهها، لطفاً ملاحظات امنیتی را بخوانید.
تغییر یافته در نسخهی 3.2: source_address، context و check_hostname افزوده شدند.
تغییر یافته در نسخهی 3.2: این کلاس اکنون در صورت امکان (یعنی اگر ssl.HAS_SNI true باشد) از میزبانهای مجازی HTTPS پشتیبانی میکند.
تغییر یافته در نسخهی 3.4: پارامتر strict حذف شد. دیگر از «پاسخهای ساده» به سبک HTTP 0.9 پشتیبانی نمیشود.
تغییر یافته در نسخهی 3.4.3: این کلاس اکنون بهطور پیشفرض تمام بررسیهای لازم برای گواهی و نام میزبان را انجام میدهد. برای بازگشت به رفتار قبلی و تأییدنشده، میتوان ssl._create_unverified_context() را به پارامتر context ارسال کرد.
تغییر یافته در نسخهی 3.8: این کلاس اکنون ssl.SSLContext.post_handshake_auth در TLS 1.3 را برای context پیشفرض یا زمانی که cert_file همراه با یک context سفارشی ارسال میشود، فعال میکند.
تغییر یافته در نسخهی 3.10: این کلاس اکنون هنگامی که هیچ context ارائه نشود، یک افزونه ALPN با نشانگر پروتکل http/1.1 ارسال میکند. در context سفارشی باید پروتکلهای ALPN با set_alpn_protocols() تنظیم شوند.
تغییر یافته در نسخهی 3.12: پارامترهای منسوخ key_file، cert_file و check_hostname حذف شدهاند.
تغییر یافته در نسخهی 3.15: پارامتر max_response_headers اضافه شد.
-
class http.client.HTTPResponse(sock, debuglevel=0, method=None, url=None)¶
کلاسی که نمونههای آن پس از اتصال موفق برگردانده میشوند. این کلاس مستقیماً توسط کاربر نمونهسازی نمیشود.
تغییر یافته در نسخهی 3.4: پارامتر strict حذف شد. دیگر از «پاسخهای ساده» (Simple Responses) به سبک HTTP 0.9 پشتیبانی نمیشود.
این ماژول تابع زیر را فراهم میکند:
-
http.client.parse_headers(fp)¶
سرآیندها را از یک اشارهگر پرونده fp که نشاندهندهی یک درخواست/پاسخ HTTP است، تجزیه کنید. پرونده باید یک خوانندهی BufferedIOBase باشد (یعنی متنی نباشد) و باید سرآیندای معتبر به سبک RFC 5322 ارائه کند.
این تابع یک نمونه از http.client.HTTPMessage را برمیگرداند که فیلدهای سرآیند را نگه میدارد، اما باری ندارد (مشابه HTTPResponse.msg و http.server.BaseHTTPRequestHandler.headers). پس از بازگشت، اشارهگر پرونده fp آماده خواندن بدنه HTTP است.
نکته
parse_headers() خط شروع (start-line) یک پیام HTTP را تجزیه نمیکند؛ فقط سطرهای Name: value را تجزیه میکند. پرونده باید برای خواندن این سطرهای فیلد آماده باشد، بنابراین خط اول باید پیش از فراخوانی این تابع مصرف شده باشد.
استثناهای زیر در صورت لزوم پرتاب میشوند:
-
exception http.client.HTTPException¶
کلاس پایه سایر استثناهای این ماژول. این یک زیرکلاس از Exception است.
-
exception http.client.NotConnected¶
زیرکلاسی از HTTPException.
-
exception http.client.InvalidURL¶
زیرکلاسی از HTTPException، که اگر پورتی داده شود و آن پورت غیرعددی یا خالی باشد، پرتاب میشود.
-
exception http.client.UnknownProtocol¶
زیرکلاسی از HTTPException.
-
exception http.client.UnknownTransferEncoding¶
زیرکلاسی از HTTPException.
-
exception http.client.UnimplementedFileMode¶
زیرکلاسی از HTTPException.
-
exception http.client.IncompleteRead¶
زیرکلاسی از HTTPException.
-
exception http.client.ImproperConnectionState¶
زیرکلاسی از HTTPException.
-
exception http.client.CannotSendRequest¶
زیرکلاسی از ImproperConnectionState.
-
exception http.client.CannotSendHeader¶
زیرکلاسی از ImproperConnectionState.
-
exception http.client.ResponseNotReady¶
زیرکلاسی از ImproperConnectionState.
-
exception http.client.BadStatusLine¶
زیرکلاسی از HTTPException. زمانی پرتاب میشود که یک سرور با کد وضعیت HTTP پاسخ دهد که ما آن را درک نمیکنیم.
-
exception http.client.LineTooLong¶
زیرکلاسی از HTTPException. زمانی پرتاب میشود که یک خط بیش از حد طولانی در پروتکل HTTP از سرور دریافت شود.
-
exception http.client.RemoteDisconnected¶
زیرکلاسی از ConnectionResetError و BadStatusLine. زمانی توسط HTTPConnection.getresponse() پرتاب میشود که تلاش برای خواندن پاسخ منجر به خوانده نشدن هیچ دادهای از اتصال شود؛ این موضوع نشان میدهد که طرف مقابل، اتصال را بسته است.
ثابتهای تعریفشده در این ماژول عبارتاند از:
-
http.client.HTTP_PORT¶
پورت پیشفرض پروتکل HTTP (همیشه 80).
-
http.client.HTTPS_PORT¶
پورت پیشفرض برای پروتکل HTTPS (همیشه 443).
-
http.client.responses¶
این دیکشنری کدهای وضعیت HTTP 1.1 را به نامهای W3C نگاشت میکند.
مثال: http.client.responses[http.client.NOT_FOUND] برابر با 'Not Found' است.
برای مشاهدهی فهرستی از کدهای وضعیت HTTP که در این ماژول بهصورت ثابت در دسترس هستند، کدهای وضعیت HTTP را ببینید.
اشیای HTTPConnection¶
نمونههای HTTPConnection دارای متدهای زیر هستند:
-
HTTPConnection.request(method, url, body=None, headers={}, *, encode_chunked=False)¶
با این کار، یک درخواست با استفاده از متد درخواست HTTP method و URI درخواست url به سرور ارسال میشود. url ارائهشده باید یک مسیر مطلق باشد تا با RFC 2616 §5.1.2 مطابقت داشته باشد (مگر در صورت اتصال به یک سرور پراکسی HTTP یا استفاده از متدهای OPTIONS یا CONNECT).
اگر body مشخص شده باشد، دادهی مشخصشده پس از پایان سرآیندها ارسال میشود. این داده میتواند یک str، یک bytes-like object، یک file object باز یا یک پیمایشپذیر از bytes باشد. اگر body یک رشته باشد، بهصورت ISO-8859-1، که پیشفرض HTTP است، کدگذاری میشود. اگر یک شیء شبهبایت باشد، بایتها همانطور که هستند ارسال میشوند. اگر یک file object باشد، محتوای پرونده ارسال میشود؛ این شیء پرونده باید دستکم از متد read() پشتیبانی کند. اگر شیء پرونده نمونهای از io.TextIOBase باشد، دادهای که متد read() برمیگرداند بهصورت ISO-8859-1 کدگذاری میشود؛ در غیر این صورت، دادهای که read() برمیگرداند همانطور که هست ارسال میشود. اگر body یک پیمایشپذیر باشد، عناصر آن همانطور که هستند ارسال میشوند تا زمانی که پیمایشپذیر exhausted شود.
آرگومان headers باید یک نگاشت از سرآیندهای HTTP اضافی برای ارسال همراه با درخواست باشد. برای مطابقت با RFC 2616 §5.1.2 باید یک سرآیند Host ارائه شود (مگر اینکه به یک سرور پراکسی HTTP متصل شوید یا از متدهای OPTIONS یا CONNECT استفاده کنید).
اگر headers نه شامل Content-Length و نه شامل Transfer-Encoding باشد، اما بدنهای برای درخواست وجود داشته باشد، یکی از آن فیلدهای سرآیند بهطور خودکار اضافه خواهد شد. اگر body برابر None باشد، سرآیند Content-Length برای متدهایی که انتظار بدنه دارند (PUT، POST و PATCH) روی 0 تنظیم خواهد شد. اگر body یک رشته یا یک شیء شبهبایت باشد که در عین حال یک پرونده نیست، سرآیند Content-Length برابر طول آن تنظیم خواهد شد. هر نوع دیگری از body (بهطور کلی پروندهها و پیمایشپذیرها) بهصورت کدگذاری تکهای (chunk-encoded) درخواهد آمد و سرآیند Transfer-Encoding بهطور خودکار بهجای Content-Length تنظیم خواهد شد.
آرگومان encode_chunked تنها زمانی مرتبط است که Transfer-Encoding در headers مشخص شده باشد. اگر encode_chunked برابر False باشد، شیء HTTPConnection فرض میکند که تمام کدگذاریها توسط کد فراخوان مدیریت میشود. اگر True باشد، بدنه بهصورت تکهای (chunk-encoded) کدگذاری میشود.
برای مثال، جهت انجام یک درخواست GET به https://docs.python.org/3/:
>>> import http.client
>>> host = "docs.python.org"
>>> conn = http.client.HTTPSConnection(host)
>>> conn.request("GET", "/3/", headers={"Host": host})
>>> response = conn.getresponse()
>>> print(response.status, response.reason)
200 OK
نکته
کدگذاری انتقال تکهای (chunked transfer encoding) به نسخه 1.1 پروتکل HTTP افزوده شده است. مگر اینکه مشخص باشد سرور HTTP از HTTP 1.1 پشتیبانی میکند، فراخواننده باید یا Content-Length را مشخص کند، یا باید یک شیء str یا شیء شبهبایت (bytes-like) را که همزمان پرونده هم نباشد، بهعنوان نمایش بدنه ارسال کند.
نکته
توجه داشته باشید که پیش از آنکه بتوانید درخواست جدیدی را به سرور ارسال کنید، باید کل پاسخ را خوانده باشید یا اگر getresponse() استثنایی غیر از ConnectionError پرتاب کرده باشد، close() را فراخوانی کرده باشید.
تغییر یافته در نسخهی 3.2: body اکنون میتواند پیمایشپذیر باشد.
تغییر یافته در نسخهی 3.6: اگر هیچکدام از Content-Length و Transfer-Encoding در headers تنظیم نشده باشند، اشیاء پرونده و پیمایشپذیر body اکنون کدگذاری تکهای (chunk-encoded) میشوند. آرگومان encode_chunked اضافه شد. هیچ تلاشی برای تعیین Content-Length برای اشیاء پرونده انجام نمیشود.
-
HTTPConnection.getresponse()¶
باید پس از ارسال درخواست، برای دریافت پاسخ از سرور فراخوانی شود. یک نمونه HTTPResponse برمیگرداند.
تغییر یافته در نسخهی 3.5: اگر یک ConnectionError یا یکی از زیرکلاسهای آن پرتاب شود، شیء HTTPConnection هنگامی که درخواست جدیدی ارسال شود، برای اتصال مجدد آماده خواهد بود.
توجه داشته باشید که این موضوع به استثناهای OSError پرتابشده توسط سوکت زیرین اعمال نمیشود. در عوض، فراخواننده مسئول فراخوانی close() روی اتصال موجود است.
-
HTTPConnection.set_debuglevel(level)¶
سطح اشکالزدایی را تنظیم کنید. سطح اشکالزدایی پیشفرض 0 است، به این معنا که هیچ خروجی اشکالزدایی چاپ نمیشود. هر مقدار بزرگتر از 0 باعث میشود تمام خروجیهای اشکالزدایی که در حال حاضر تعریف شدهاند، در stdout چاپ شوند. debuglevel به هر شیء جدید HTTPResponse که ایجاد شود، منتقل میشود.
-
HTTPConnection.set_tunnel(host, port=None, headers=None)¶
میزبان و پورت را برای تونلزنی HTTP Connect تنظیم کنید. این کار امکان برقراری اتصال از طریق یک سرور پراکسی را فراهم میکند.
آرگومانهای host و port پایانهی اتصال تونلشده را مشخص میکنند (یعنی نشانی گنجاندهشده در درخواست CONNECT، نه نشانی سرور پراکسی).
آرگومان headers باید نگاشتی از سرآیندهای اضافی HTTP برای ارسال با درخواست CONNECT باشد. مقادیر سرآیند غیررشتهای از طریق str() به رشته تبدیل میشوند.
از آنجا که برای درخواست تونلسازی HTTP CONNECT از HTTP/1.1 استفاده میشود، طبق RFC، باید یک سرآیند HTTP Host: ارائه شود که با قالب authority (authority-form) هدف درخواستی که بهعنوان مقصد درخواست CONNECT ارائه شده است مطابقت داشته باشد. اگر سرآیند HTTP Host: از طریق آرگومان headers ارائه نشود، یک سرآیند بهطور خودکار تولید و ارسال میشود.
برای مثال، برای ایجاد تونل از طریق یک سرور پراکسی HTTPS که بهصورت محلی روی پورت ۸۰۸۰ اجرا میشود، نشانی پراکسی را به سازندهی HTTPSConnection و نشانی میزبانی را که در نهایت میخواهیم به آن دسترسی پیدا کنیم، به متد set_tunnel() میدهیم:
>>> import http.client
>>> conn = http.client.HTTPSConnection("localhost", 8080)
>>> conn.set_tunnel("www.python.org")
>>> conn.request("HEAD","/index.html")
تغییر یافته در نسخهی 3.12: درخواستهای تونلزنی HTTP CONNECT از پروتکل HTTP/1.1 استفاده میکنند، که از پروتکل HTTP/1.0 ارتقا یافته است. سرآیند HTTP Host: برای HTTP/1.1 الزامی است، بنابراین اگر در آرگومان headers ارائه نشده باشد، یک سرآیند بهطور خودکار تولید و ارسال میشود.
-
HTTPConnection.get_proxy_response_headers()¶
یک دیکشنری شامل سرآیندهای پاسخ دریافتشده از سرور پراکسی به درخواست CONNECT برمیگرداند.
اگر درخواست CONNECT ارسال نشده باشد، متد None را برمیگرداند.
اضافه شده در نسخهی 3.12.
-
HTTPConnection.connect()¶
به سرور مشخصشده در زمان ایجاد شیء متصل میشود. بهطور پیشفرض، اگر کلاینت از قبل اتصالی نداشته باشد، این متد بهصورت خودکار هنگام ارسال درخواست فراخوانی میشود.
یک رویداد حسابرسی http.client.connect را با آرگومانهای self، host و port پرتاب میکند.
-
HTTPConnection.close()¶
بستن اتصال به سرور.
-
HTTPConnection.blocksize¶
اندازهی بافر بر حسب بایت برای ارسال بدنهی پیام شبهپرونده.
-
HTTPConnection.max_response_headers¶
حداکثر تعداد سرآیندهای پاسخ مجاز برای کمک به جلوگیری از حملات محرومیت از سرویس. به طور پیشفرض، حداکثر تعداد سرآیندهای مجاز روی ۱۰۰ تنظیم شده است. همین محدودیت برای بخش پایانی (trailer) یک پاسخ بخشبندیشده نیز اعمال میشود.
اضافه شده در نسخهی 3.15.
بهعنوان جایگزینی برای استفاده از متد request() که در بالا توضیح داده شد، میتوانید با استفاده از چهار تابع زیر، درخواست خود را گامبهگام ارسال کنید.
-
HTTPConnection.putrequest(method, url, skip_host=False, skip_accept_encoding=False)¶
این باید اولین فراخوانی پس از برقراری اتصال به سرور باشد. این فراخوانی سطری را به سرور میفرستد که شامل رشتهی method، رشتهی url و نسخهی HTTP (HTTP/1.1) است. برای غیرفعالسازی ارسال خودکار سرآیندهای Host: یا Accept-Encoding: (برای مثال برای پذیرش کدگذاریهای اضافی محتوا)، skip_host یا skip_accept_encoding را با مقادیری غیر از False تعیین کنید.
-
HTTPConnection.putheader(header, argument[, ...])¶
این متد یک سرآیند به سبک RFC 822 را به سرور ارسال میکند. این متد سطری را به سرور میفرستد که شامل سرآیند، یک دونقطه و یک فاصله، و اولین آرگومان است. اگر آرگومانهای بیشتری داده شوند، سطرهای ادامه ارسال میشوند که هر یک شامل یک تب و یک آرگومان است.
-
HTTPConnection.endheaders(message_body=None, *, encode_chunked=False)¶
یک خط خالی به سرور ارسال کنید تا پایان سرآیندها اعلام شود. میتوانید از آرگومان اختیاری message_body برای ارسال بدنه پیام مرتبط با درخواست استفاده کنید.
اگر encode_chunked برابر True باشد، نتیجه هر تکرار از message_body بهصورت تکهای کدگذاری میشود (chunk-encoded)، همانطور که در RFC 7230، بخش 3.3.1 مشخص شده است. نحوه کدگذاری دادهها به نوع message_body وابسته است. اگر message_body رابط بافر را پیادهسازی کند، کدگذاری منجر به یک تکه واحد میشود. اگر message_body یک collections.abc.Iterable باشد، هر تکرار از message_body منجر به یک تکه میشود. اگر message_body یک شیء پرونده باشد، هر فراخوانی .read() منجر به یک تکه میشود. این متد بهطور خودکار پایان دادههای کدگذاریشده بهصورت تکهای را بلافاصله پس از message_body اعلام میکند.
نکته
به دلیل مشخصات کدگذاری تکهای (chunked encoding)، تکههای خالی که توسط بدنهی پیمایشگر تولید میشوند، توسط کدگذار تکهای (chunk-encoder) نادیده گرفته میشوند. این برای جلوگیری از خاتمه زودهنگام خواندن درخواست توسط سرور هدف به دلیل کدگذاری نادرست است.
تغییر یافته در نسخهی 3.6: پشتیبانی از کدگذاری تکهای (chunked encoding) و پارامتر encode_chunked افزوده شد.
-
HTTPConnection.send(data)¶
داده را به سرور ارسال میکند. این متد باید فقط پس از فراخوانی متد endheaders() و پیش از فراخوانی getresponse() بهطور مستقیم استفاده شود.
یک رویداد حسابرسی http.client.send را با آرگومانهای self و data پرتاب میکند.
اشیاء HTTPResponse¶
یک نمونه از HTTPResponse پاسخ HTTP از سرور را دربر میگیرد. این نمونه دسترسی به سرآیندهای درخواست و بدنهی موجودیت را فراهم میکند. پاسخ یک شیء پیمایشپذیر است و میتوان از آن در یک دستور with استفاده کرد.
تغییر یافته در نسخهی 3.5: رابط io.BufferedIOBase اکنون پیادهسازی شده است و تمام عملیات خواندن آن پشتیبانی میشود.
-
HTTPResponse.read([amt])¶
بدنه پاسخ یا حداکثر تا amt بایت بعدی را میخواند و برمیگرداند.
-
HTTPResponse.readinto(b)¶
حداکثر len(b) بایت بعدی از بدنه پاسخ را در بافر b میخواند. تعداد بایتهای خواندهشده را برمیگرداند.
-
HTTPResponse.getheader(name, default=None)¶
مقدار سرآیند name را برمیگرداند، یا اگر سرآیندی مطابق با name وجود نداشته باشد، default را برمیگرداند. اگر بیش از یک سرآیند با نام name وجود داشته باشد، تمام مقادیر را که با ', ' به هم پیوستهاند برمیگرداند. اگر default هر پیمایشپذیری بهجز یک رشته تنها باشد، عناصر آن نیز به همین ترتیب با ویرگول به هم پیوسته و برگردانده میشوند.
-
HTTPResponse.getheaders()¶
فهرستی از تاپلهای (سرآیند، مقدار) برمیگرداند.
-
HTTPResponse.fileno()¶
fileno سوکت زیرین را برمیگرداند.
-
HTTPResponse.msg¶
یک نمونه http.client.HTTPMessage که شامل سرآیندهای پاسخ است. http.client.HTTPMessage زیرکلاسی از email.message.Message است.
-
HTTPResponse.version¶
نسخهی پروتکل HTTP که سرور از آن استفاده میکند. 10 برای HTTP/1.0 و 11 برای HTTP/1.1.
-
HTTPResponse.url¶
URL منبع واکشیشده، معمولاً برای تشخیص اینکه آیا یک تغییرمسیر دنبال شده است استفاده میشود.
-
HTTPResponse.headers¶
سرآیندهای پاسخ در قالب یک نمونه از email.message.EmailMessage.
-
HTTPResponse.status¶
کد وضعیت برگرداندهشده توسط سرور.
-
HTTPResponse.reason¶
عبارت دلیل برگرداندهشده از سوی سرور.
-
HTTPResponse.debuglevel¶
یک قلاب اشکالزدایی . اگر debuglevel بزرگتر از صفر باشد، در حین خوانده و تجزیه شدن پاسخ، پیامها در stdout چاپ خواهند شد.
-
HTTPResponse.closed¶
اگر جریان بسته باشد، True است.
-
HTTPResponse.geturl()¶
منسوخ شده از نسخهی 3.9: منسوخشده به نفع url.
-
HTTPResponse.info()¶
منسوخ شده از نسخهی 3.9: منسوخشده به نفع headers.
-
HTTPResponse.getcode()¶
منسوخ شده از نسخهی 3.9: منسوخ شده به نفع status.
مثالها¶
در اینجا یک نشست نمونه آمده است که از متد GET استفاده میکند:
>>> import http.client
>>> conn = http.client.HTTPSConnection("www.python.org")
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> print(r1.status, r1.reason)
200 OK
>>> data1 = r1.read() # This will return entire content.
>>> # The following example demonstrates reading data in chunks.
>>> conn.request("GET", "/")
>>> r1 = conn.getresponse()
>>> while chunk := r1.read(200):
... print(repr(chunk))
b'<!doctype html>\n<!--[if"...
...
>>> # Example of an invalid request
>>> conn = http.client.HTTPSConnection("docs.python.org")
>>> conn.request("GET", "/parrot.spam")
>>> r2 = conn.getresponse()
>>> print(r2.status, r2.reason)
404 Not Found
>>> data2 = r2.read()
>>> conn.close()
در اینجا یک نشست نمونه آمده است که از متد HEAD استفاده میکند. توجه داشته باشید که متد HEAD هرگز هیچ دادهای را برنمیگرداند.
>>> import http.client
>>> conn = http.client.HTTPSConnection("www.python.org")
>>> conn.request("HEAD", "/")
>>> res = conn.getresponse()
>>> print(res.status, res.reason)
200 OK
>>> data = res.read()
>>> print(len(data))
0
>>> data == b''
True
در اینجا یک نشست نمونه آمده است که از متد POST استفاده میکند:
>>> import http.client, urllib.parse
>>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
>>> headers = {"Content-type": "application/x-www-form-urlencoded",
... "Accept": "text/plain"}
>>> conn = http.client.HTTPConnection("bugs.python.org")
>>> conn.request("POST", "", params, headers)
>>> response = conn.getresponse()
>>> print(response.status, response.reason)
302 Found
>>> data = response.read()
>>> data
b'Redirecting to <a href="https://bugs.python.org/issue12524">https://bugs.python.org/issue12524</a>'
>>> conn.close()
درخواستهای HTTP PUT در سمت کلاینت بسیار شبیه به درخواستهای POST هستند. تفاوت تنها در سمت سرور است، جایی که سرورهای HTTP اجازه میدهند منابع از طریق درخواستهای PUT ایجاد شوند. لازم به ذکر است که متدهای HTTP سفارشی نیز در urllib.request.Request و با تنظیم ویژگی method مناسب مدیریت میشوند. در ادامه یک نشست نمونه آمده است که از متد PUT استفاده میکند:
>>> # This creates an HTTP request
>>> # with the content of BODY as the enclosed representation
>>> # for the resource http://localhost:8080/file
...
>>> import http.client
>>> BODY = "***filecontents***"
>>> conn = http.client.HTTPConnection("localhost", 8080)
>>> conn.request("PUT", "/file", BODY)
>>> response = conn.getresponse()
>>> print(response.status, response.reason)
200, OK
© حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا اشکالی یافتید؟
ساخته شده با Sphinx 9.1.0.
|