http.client --- کلاینت پروتکل HTTP

کد منبع: Lib/http/client.py


این ماژول کلاس‌هایی را تعریف می‌کند که سمت کلاینت پروتکل‌های HTTP و HTTPS را پیاده‌سازی می‌کنند. این ماژول معمولاً به‌طور مستقیم استفاده نمی‌شود — ماژول urllib.request از آن برای مدیریت URLهایی که از HTTP و HTTPS استفاده می‌کنند، استفاده می‌کند.

همچنین ملاحظه نمائید

برای یک رابط کلاینت HTTP سطح بالاتر، بسته Requests توصیه می‌شود.

توجه

پشتیبانی از HTTPS تنها در صورتی در دسترس است که پایتون با پشتیبانی از SSL کامپایل شده باشد (از طریق ماژول ssl).

دسترس‌پذیری: not WASI.

این ماژول روی WebAssembly کار نمی‌کند یا در دسترس نیست. برای اطلاعات بیشتر سکوهای WebAssembly را ببینید.

این ماژول کلاس‌های زیر را فراهم می‌کند:

class http.client.HTTPConnection(host, port=None, [timeout, ]source_address=None, blocksize=8192)

یک نمونه HTTPConnection نشان‌دهنده یک تراکنش با یک سرور HTTP است. نمونه‌سازی آن باید با دادن یک میزبان و شماره پورت اختیاری انجام شود. اگر شماره پورتی داده نشود، پورت از رشته میزبان استخراج می‌شود، به شرطی که به شکل host:port باشد، در غیر این صورت از پورت پیش‌فرض HTTP (۸۰) استفاده می‌شود. اگر پارامتر اختیاری timeout داده شود، عملیات‌های مسدودکننده (مانند تلاش‌های اتصال) پس از آن تعداد ثانیه منقضی می‌شوند (اگر داده نشود، از تنظیم سراسری پیش‌فرض timeout استفاده می‌شود). پارامتر اختیاری source_address می‌تواند یک تاپل (host, port) باشد که به‌عنوان آدرس مبدأ برای برقراری اتصال HTTP استفاده می‌شود. پارامتر اختیاری blocksize اندازه بافر را بر حسب بایت برای ارسال بدنه پیام شبه‌پرونده تنظیم می‌کند.

برای مثال، فراخوانی‌های زیر همگی نمونه‌هایی ایجاد می‌کنند که به سرور در همان میزبان و پورت متصل می‌شوند:

>>> 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 افزوده شد.

class http.client.HTTPSConnection(host, port=None, *, [timeout, ]source_address=None, context=None, blocksize=8192)

زیرکلاسی از 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 حذف شده‌اند.

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() پرتاب می‌شود که تلاش برای خواندن پاسخ منجر به خوانده نشدن هیچ داده‌ای از اتصال شود؛ این موضوع نشان می‌دهد که طرف مقابل، اتصال را بسته است.

اضافه شده در نسخه‌ی 3.5: پیش‌تر، BadStatusLine('') پرتاب می‌شد.

ثابت‌های تعریف‌شده در این ماژول عبارت‌اند از:

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).

If body is specified, the specified data is sent after the headers are finished. It may be a str, a bytes-like object, an open file object, or an iterable of bytes. If body is a string, it is encoded as ISO-8859-1, the default for HTTP. If it is a bytes-like object, the bytes are sent as is. If it is a file object, the contents of the file is sent; this file object should support at least the read() method. If the file object is an instance of io.TextIOBase, the data returned by the read() method will be encoded as ISO-8859-1, otherwise the data returned by read() is sent as is. If body is an iterable, the elements of the iterable are sent as is until the iterable is 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 که ایجاد شود، منتقل می‌شود.

اضافه شده در نسخه‌ی 3.1.

HTTPConnection.set_tunnel(host, port=None, headers=None)

میزبان و پورت را برای تونل‌زنی HTTP Connect تنظیم کنید. این کار امکان برقراری اتصال از طریق یک سرور پراکسی را فراهم می‌کند.

آرگومان‌های host و port پایانه‌ی اتصال تونل‌شده را مشخص می‌کنند (یعنی نشانی گنجانده‌شده در درخواست CONNECT، نه نشانی سرور پراکسی).

آرگومان headers باید یک نگاشت از سرآیندهای HTTP اضافی برای ارسال به‌همراه درخواست CONNECT باشد.

از آن‌جا که برای درخواست تونل‌سازی 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.2.

تغییر یافته در نسخه‌ی 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

اندازه‌ی بافر بر حسب بایت برای ارسال بدنه‌ی پیام شبه‌پرونده.

اضافه شده در نسخه‌ی 3.7.

به‌عنوان جایگزینی برای استفاده از متد 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 می‌خواند. تعداد بایت‌های خوانده‌شده را برمی‌گرداند.

اضافه شده در نسخه‌ی 3.3.

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

اشیای HTTPMessage

class http.client.HTTPMessage(email.message.Message)

یک نمونه از http.client.HTTPMessage سرآیندهای یک پاسخ HTTP را نگه می‌دارد. این نمونه با استفاده از کلاس email.message.Message پیاده‌سازی شده است.