راهنمای مبتدیان برای درخواستهای HTTP Python
همه چیز در وب از طریق درخواست قابل دسترسی است. اگر به اطلاعاتی از یک صفحه وب در برنامه پایتون خود نیاز دارید، به یک درخواست وب نیاز دارید. در این مقاله، درخواستهای پایتون را بررسی میکنیم. ما به چگونگی ساختار یک درخواست وب و نحوه ایجاد یک درخواست پایتون خواهیم پرداخت. در پایان، میتوانید از کتابخانه درخواستهای پایتون استفاده کنید، که کل فرآیند را آسانتر میکند. طراحی سایت
مقدمه ای بر درخواست های HTTP
برای تبادل داده در وب، ابتدا به یک پروتکل ارتباطی نیاز داریم. پروتکلی که هنگام مرور وب استفاده می شود، پروتکل انتقال ابرمتن یا HTTP است. HTTP از TCP به عنوان یک پروتکل انتقال استفاده می کند، زیرا به حمل و نقل قابل اعتماد نیاز دارد و فقط TCP می تواند آن را تضمین کند.
فرض کنید منبعی وجود دارد که به آن نیاز داریم – مانند صفحه HTML، در یک وب سرور واقع در جایی در جهان. ما می خواهیم به این منبع دسترسی داشته باشیم یا به عبارت دیگر می خواهیم به آن صفحه در مرورگر وب خود نگاه کنیم. اولین کاری که باید انجام دهیم درخواست HTTP است. HTTP یک پروتکل سرویس گیرنده-سرور است، به این معنی که درخواست ها توسط مشتری آغاز می شوند.
پس از اینکه سرور درخواستها را دریافت کرد، آنها را پردازش میکند و پاسخ مناسب را برمیگرداند.
سرور ممکن است به طرق مختلف پاسخ دهد. ممکن است منبع درخواستی ما را ارسال کند، یا اگر چیزی مطابق انتظار پیش نرود، با کدهای وضعیت پاسخ دهد.
در هر پروتکل ارتباطی، اطلاعات باید در زمینه های خاصی باشد. به این دلیل که هم مشتری و هم سرور باید بدانند که چگونه درخواست یا پاسخ را تفسیر کنند. در بخشهای بعدی، نحوه ساخت درخواست HTTP و پاسخ HTTP را بررسی خواهیم کرد. همچنین نقش مهم ترین زمینه ها را مورد بحث قرار خواهیم داد.
درخواست HTTP
یکی از مهمترین ویژگیهای طراحی HTTP این است که قابل خواندن توسط انسان است. این بدان معناست که وقتی به یک درخواست HTTP نگاه میکنیم، میتوانیم به راحتی همه چیز را بخوانیم، حتی اگر پیچیدگی زیادی در زیر سرپوش وجود داشته باشد. یکی دیگر از ویژگی های HTTP این است که بی دولت است. این بدان معنی است که هیچ ارتباطی بین دو درخواست ارائه شده یکی پس از دیگری وجود ندارد. پروتکل HTTP چیزی از درخواست قبلی را به خاطر نمی آورد. این بدان معناست که هر درخواست باید شامل همه چیزهایی باشد که سرور برای انجام درخواست نیاز دارد.
یک درخواست معتبر HTTP باید حاوی عناصر زیر باشد:
- یک روش HTTP — مانند
GET
یاPOST
- نسخه پروتکل HTTP
- مسیر منبع برای واکشی
سپس، میتوانیم تعدادی سرصفحه اختیاری نیز اضافه کنیم که اطلاعات اضافی درباره فرستنده یا پیام را مشخص میکند. یکی از نمونههای هدر درخواست HTTP رایج، User-Agent
یا زبان طبیعی مورد علاقه مشتری است. هر دوی این سرصفحههای اختیاری اطلاعاتی در مورد مشتری ارائهدهنده درخواست میدهند.
این نمونه ای از یک پیام HTTP است و ما می توانیم به وضوح تمام فیلدهای مشخص شده را درک کنیم:
~~~http
GET / HTTP/1.1
میزبان: www.google.com
Accept-Language: en-GB,en;q= 0.5
~~~
خط اول نوع درخواست و نسخه پروتکل HTTP را مشخص می کند. سپس Host
و زبان پذیرفته شده توسط مشتری که درخواست را ارسال می کند را مشخص می کنیم. معمولاً پیامها بسیار طولانیتر هستند، اما این نشانی از ظاهر آنها میدهد.
پاسخ HTTP
اکنون که تصوری از ظاهر درخواست HTTP داریم، میتوانیم ادامه دهیم و پاسخ HTTP را ببینیم.
یک پاسخ HTTP معمولاً حاوی عناصر زیر است:
- نسخه پروتکل HTTP
- یک کد وضعیت، با یک پیام کوتاه توصیفی
- لیستی از هدرهای HTTP
- یک متن پیام حاوی منبع درخواستی
اکنون که عناصر اساسی مورد نیاز شما را معرفی کردهایم، ارزش آن را دارد که قبل از برداشتن مرحله بعدی، خلاصهای از آن تهیه کنید. اکنون باید مشخص باشد که هر زمان که یک کلاینت بخواهد با یک سرور HTTP ارتباط برقرار کند، باید یک درخواست HTTP ایجاد و ارسال کند. سپس، هنگامی که سرور آن را دریافت می کند، یک پاسخ HTTP ایجاد و ارسال می کند.
بالاخره آماده معرفی کتابخانه درخواست های پایتون هستیم.
کتابخانه درخواستهای پایتون
کتابخانه درخواستهای پایتون به شما امکان میدهد درخواستهای HTTP پایتون را ارسال کنید – از اولیه تا پیچیده . کتابخانه درخواستهای پایتون پیچیدگیهای ایجاد درخواستهای پیچیده پایتون را خلاصه میکند و یک رابط کاربری آسان ارائه میکند. در بخشهای بعدی، نحوه ایجاد درخواستهای آسان پایتون و تفسیر پاسخ را خواهیم دید. همچنین برخی از ویژگی های ارائه شده توسط کتابخانه درخواست های پایتون را خواهیم دید.
نصب درخواستهای پایتون
ابتدا باید کتابخانه درخواست های پایتون را نصب کنیم. بیایید آن را با استفاده از pip
:
نصب کنیم
درخواستهای
$ pip نصب
وقتی کتابخانه درخواستهای پایتون به درستی نصب شد، میتوانیم استفاده از آن را شروع کنیم.
اولین درخواست GET ما با درخواستهای Python
اولین کاری که باید انجام دهیم این است که یک فایل پایتون ایجاد کنیم. در این مثال، ما آن را web.py
می نامیم. در داخل این فایل منبع، این کد را وارد کنید:
درخواستهای
وارد کردن
URL = "https://www.google.com"
resp = درخواستها.get(URL)
چاپ(resp)
این برنامه یک درخواست GET برای Google ارسال می کند. اگر این برنامه را اجرا کنیم، احتمالاً این خروجی را دریافت خواهیم کرد:
$ python web.py
پاسخ [200]>
پس، این به چه معناست؟
ما قبلاً در مورد کد وضعیت صحبت کردیم. این خروجی به ما می گوید که درخواست ما با موفقیت دریافت، درک و پردازش شده است. کدهای دیگری نیز وجود دارد، و ما می توانیم تعدادی از رایج ترین آنها را فهرست کنیم:
301 به طور دائم منتقل شد
. این یک پیام تغییر مسیر است. URL منبعی که به دنبال آن بودیم منتقل شده است. URL جدید با پاسخ همراه است.401 غیر مجاز
. این نشان دهنده پاسخ خطای مشتری است. در این مورد، سرور به ما میگوید که قبل از ادامه درخواست، باید احراز هویت را انجام دهیم.404 یافت نشد
. این نشان دهنده پاسخ خطای مشتری نیز می باشد. به ویژه، این بدان معنی است که سرور نمی تواند منبع مورد نظر ما را پیدا کند.
اگر بخواهیم وضعیت را به صورت مشروط بررسی کنیم، و اقدامات مختلفی را بر اساس کد وضعیت ارائه دهیم، چه؟ خوب، ما به راحتی می توانیم این کار را انجام دهیم:
درخواستهای
وارد کردن
URL = "https://www.google.com/blah"
resp = درخواستها.get(URL)
اگر resp.status_code == 200:
چاپ("بسیار خوب!")
الیف resp.status_code == 301:
چاپ("اوه، منبع منتقل شد!")
الیف resp.status_code == 404:
چاپ("اوه نه، منبع پیدا نشد!")
دیگر:
چاپ(resp.status_code)
اگر اکنون اسکریپت را اجرا کنیم، چیز متفاوتی دریافت خواهیم کرد. امتحان کنید و ببینید چه چیزی بدست می آوریم. 😉
اگر پیام کوتاه توصیفی همراه با هر کد وضعیت را نیز بخواهیم، میتوانیم از resp.reason
استفاده کنیم. در مورد کد وضعیت 200، ما به سادگی OK
را دریافت خواهیم کرد.
معرفی سایت: https://tabrizyab.ir/html-چیست؟/
بازرسی پاسخ درخواست پایتون
در این مرحله، ما می دانیم که چگونه یک درخواست پایه پایتون ایجاد کنیم. پس از درخواست، ما پاسخ را می خواهیم، درست است؟
در بخش قبل نحوه دریافت کد وضعیت پاسخ را دیدیم. اکنون، میخواهیم متن پاسخ را بخوانیم، که منبع واقعی درخواستی ما است. برای این کار باید از resp.content
استفاده کنیم. فرض کنید که ما به دنبال صفحه اصلی گوگل هستیم.
این چیزی است که هنگام اجرای اسکریپت به دست می آوریم:
b'!doctype html>html اقلام="" نوع مورد="http://schema.org/WebPage" lang ="en">head>meta محتوا="text/html; [...]
من [...]
را در بالا اضافه کردم زیرا منبعی که دریافت می کنیم – که یک سند text/html
است – برای چاپ خیلی طولانی است. با چه مقدار؟ برای دریافت این اطلاعات می توانیم از len(resp.content)
استفاده کنیم. در مورد بالا، 13931 بایت بود – قطعاً برای چاپ اینجا خیلی زیاد است!
استفاده از API
یکی از دلایل محبوبیت کتابخانه درخواست های پایتون این است که تعامل با API ها را بسیار آسان می کند. برای این مثال، ما از یک API ساده برای پیشبینی سن افراد با توجه به نام آنها استفاده میکنیم. این API Agify نام دارد.
این کد برای مثال است:
درخواستهای
وارد کردن
وارد کردن json
URL = "https://api.agify.io/?name=Marcus"
resp = درخواستها.get(URL)
اگر resp.status_code == 200:
رمزگذاری شده = resp.json()
چاپ(رمزگذاری شده["سن"])
دیگر:
چاپ(resp.status_code)
در این مورد می خواهیم سن فردی را که مارکوس نام دارد بدانیم. پس از دریافت پاسخ، اگر کد وضعیت 200 باشد، نتیجه را با استفاده از resp.json()
در JSON تفسیر می کنیم. در این مرحله، یک شی دیکشنری مانند داریم و میتوانیم سن تخمینی را چاپ کنیم.
سن تخمینی مارکوس 41
سال است.
سرصفحههای HTTP اطلاعات بیشتری را در اختیار هر دو طرف مکالمه HTTP قرار میدهند. در مثال زیر، خواهیم دید که چگونه می توانیم هدر یک درخواست HTTP GET را تغییر دهیم. به طور خاص، سرصفحههای User-Agent
و Accept-Language
را تغییر میدهیم. User-Agent
اطلاعاتی در مورد برنامه کاربردی، سیستم عامل و فروشنده عامل درخواست کننده به سرور می گوید. سرصفحه Accept-Language
زبانهایی را که مشتری قادر به درک آن است ارتباط برقرار میکند.
این قطعه کد ساده ما است:
درخواستهای
وارد کردن
URL = "https://www.google.com"
custom_headers = {'Accept-Language': 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'، 'User-Agent': 'Mozilla/5.0 (Linux; Android 12; SM-S906N Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML، مانند Gecko) نسخه/4.0 Chrome/80.0.3973ri. '}
resp = درخواستها.get(URL، headers=custom_headers)
اگر resp.status_code == 200:
چاپ(resp.content[:100] )
دیگر:
چاپ(resp.status_code)
اگر همه چیز درست پیش برود، باید چیزی شبیه این دریافت کنید:
$ ! doctype html>html lang="fr">head>meta مجموعه نویسه="UTF-8">متا محتوا="width=device-width,mini [...]
در این مثال، ما User-Agent
را تغییر دادهایم، وانمود میکنیم که درخواست ما از Mozilla Firefox است. ما همچنین می گوییم که سیستم عامل ما Android 12 است و دستگاه ما یک Samsung Galaxy S22 است.
از آنجایی که 100 کاراکتر اول پاسخ بالا را چاپ کردهایم، میتوانیم ببینیم که صفحه HTML که دریافت کردهایم به زبان فرانسوی است.
نتیجه گیری
در این مقاله در مورد پروتکل HTTP با یک مقدمه نظری کوتاه صحبت کردیم. سپس به کتابخانه درخواست های پایتون نگاه کردیم. دیدیم که چگونه درخواستهای HTTP پایتون را بنویسیم و چگونه آنها را بر اساس نیازهای خود سفارشی کنیم.
امیدوارم این کتابخانه و این مقاله برای پروژه های خود مفید واقع شوند.
منبع: https://iransite.com