چند تا درخواست ساده HTTP با پایتون

خب امروز میخواهیم با استفاده از کتابخانه requests درخواست های HTTP مختلف رو تست کنیم , هدف از ساخت کتابخانه‌ requests در پایتون، ایجاد استانداردهایی برای ارسال و دریافت درخواست‌های مبتنی بر HTTP است در این کتابخانه می‌توان به کمک APIهای نوشته شده برای برنامه درخواست های مختلف HTTP رو زد.رفقا شما میتوانید با کتابخانه های دیگه ای هم بزنید ولی ما امروز میخواهیم با کتابخانه requests کار کنیم پروتکل HTTP چیست ؟ شروع کار با requests : کار را با نصب کتابخانه‌ Requests پایتون شروع می‌کنیم. دستور زیر را در محیط ترمینال اجرا کنید:pip install requestsمتد GET Request : متد POSTاز متدهای پرکاربرد و رایج در درخواست‌های مبتنی بر وب است. این متد بیانگر این است که شما سعی در به دست آوردن یا بازیابی اطلاعات از منبع مشخصی از داده‌ها دارید. برای ایجاد GET Request از متد ()requests.get استفاده می‌کنیم. برای تست این دستور یک درخواست مبتنی بر GET برای صفحه‌ی آپارات خودم ایجاد می‌کنیم:import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.get(url) print(request)Response : <Response [200]>خب خب شما در این جا میبیند کد وضعیت 200 شده کد وضعیت 200 چی بود‌ ؟؟؟ یعنی درخواست با موفقیت اجرا شده بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد get بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیممتد POST Request (Status Codes) : اطلاعات به دست آمده از پاسخ، حاوی اطلاعاتی در مورد status code یا کد وضعیت است. کد وضعیت شما را از وضعیت ریکوئست باخبر می‌کند. برای مثال وضعیت 200 OK به این معناست که ریکوئست شما با موفقیت پاسخ داده شده است. کد 404 NOT FOUND بیانگر این است که منابع مورد جستجوی شما پیدا نشده‌ است. status codeهای بسیاری وجود دارند که می‌توانند نشان دهند درخواست شما چگونه پاسخی را دریافت کرده و در چه وضعیتی قرار داردکد های وضعیت پروتکل اچ تی تی پیimport requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.get(url) print(request.status_code)Response : 200بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد get بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم کد وضعیت رو چاپ کن محتوا یا Content : پاسخ دریافتی برای یک درخواست از نوع GET شامل اطلاعاتی ارزشمند است. با استفاده از متدها و صفات تعریف شده برای Response می‌توانید payloadها را در گستره‌ی وسیعی از فرمت‌ها ببینید برای دیدن محتوای پاسخ (response content) از content. استفاده می‌کنیم : import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.get(url) print(request.content)Response : در پاسخ شما payload های اون وب سایت رو میبیند و انقدر زیاد بودن که نشد اینجا بزارم بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد get بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط محتوا رو چاپ کن هدر ها Header : قسمت هدر ها اطلاعات زیادی در مورد نوع داده‌ی موجود در قسمت payload پاسخ و محدودیت زمانی برای مدت cashe کردن پاسخ را به شما ارائه می‌دهد. برای این منظور از تابع header. استفاده می‌کنیم:import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.get(url) print(request.headers)Response : {'date': 'Tue, 13 Jun 2023 07:12:01 GMT', 'content-type': 'text/html', 'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding', 'last-modified': 'Mon, 12 Jun 2023 22:56:00 GMT', 'etag': 'W/&quot6487a280-7665&quot', 'cache-control': 'no-cache', 'x-frame-options': 'SAMEORIGIN', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'referrer-policy': 'strict-origin-when-cross-origin', 'server': 'nginx', 'x-upstream-ct': '0.000', 'x-upstream-ht': '0.271', 'x-cache': 'O-BYPASS', 'x-upstream': '0', 'content-encoding': 'gzip'} بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد get بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط هدر ها رو چاپ کن در خواست به یک هدر خواص : میخواهیم فقط به یک هدر درخواست بزنیم و محتوای داخلش رو ببینیم به عنوان مثال هدر ()content-type : import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.get(url) print(request.headers[&quotcontent-type&quot])Response : text/htmlبررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد get بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط هدر content-type رو چاپ کن دریافت اطلاعات کلی : ما اینجا فقط میخواهیم اطلاعات وب سایت رو ببینیم به صورت کلی : import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.get(url) print(request.text)Response : این جا شما یه اطلاعات کلی از لینک مورد نظر میبینید که انقدر زیاد بود که نتوانست اینجا بزارمبررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط محتوای text رو چاپ کنمتد POST Request :از متد POST برای ارسال اطلاعات از فرم ها و صفحات html به سمت سرور استفاده می شود. معمولا وقتی شما قصد دارید اطلاعات را به سمت سرور ارسال کنید و در آنجا ذخیره کنید از این متد استفاده می شود. یک درخواست POST در کش مرورگر ذخیره نمی شودimport requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.post(url) print(request)Response : <Response [200]>خب خب شما در این جا میبیند کد وضعیت 200 شده کد وضعیت 200 چی بود‌ ؟؟؟ یعنی درخواست با موفقیت اجرا شده بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیممتد POST Request (Status Codes) : اطلاعات به دست آمده از پاسخ، حاوی اطلاعاتی در مورد status code یا کد وضعیت است. کد وضعیت شما را از وضعیت ریکوئست باخبر می‌کند. برای مثال وضعیت 200 OK به این معناست که ریکوئست شما با موفقیت پاسخ داده شده است. کد 404 NOT FOUND بیانگر این است که منابع مورد جستجوی شما پیدا نشده‌ است. status codeهای بسیاری وجود دارند که می‌توانند نشان دهند درخواست شما چگونه پاسخی را دریافت کرده و در چه وضعیتی قرار داردکد های وضعیت پروتکل اچ تی تی پیimport requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.post(url) print(request.status_code)Response : 200بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم کد وضعیت رو چاپ کن محتوا یا Content : پاسخ دریافتی برای یک درخواست از نوع GET شامل اطلاعاتی ارزشمند است. با استفاده از متدها و صفات تعریف شده برای Response می‌توانید payloadها را در گستره‌ی وسیعی از فرمت‌ها ببینید برای دیدن محتوای پاسخ (response content) از content. استفاده می‌کنیم : import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.post(url) print(request.content)Response : در پاسخ شما payload های اون وب سایت رو میبیند و انقدر زیاد بودن که نشد اینجا بزارم بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط محتوا رو چاپ کن هدر ها Header : قسمت هدر ها اطلاعات زیادی در مورد نوع داده‌ی موجود در قسمت payload پاسخ و محدودیت زمانی برای مدت cashe کردن پاسخ را به شما ارائه می‌دهد. برای این منظور از تابع header. استفاده می‌کنیم:import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.post(url) print(request.headers)Response : {'date': 'Tue, 13 Jun 2023 07:12:01 GMT', 'content-type': 'text/html', 'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding', 'last-modified': 'Mon, 12 Jun 2023 22:56:00 GMT', 'etag': 'W/&quot6487a280-7665&quot', 'cache-control': 'no-cache', 'x-frame-options': 'SAMEORIGIN', 'x-content-type-options': 'nosniff', 'x-xss-protection': '1; mode=block', 'referrer-policy': 'strict-origin-when-cross-origin', 'server': 'nginx', 'x-upstream-ct': '0.000', 'x-upstream-ht': '0.271', 'x-cache': 'O-BYPASS', 'x-upstream': '0', 'content-encoding': 'gzip'} بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط هدر ها رو چاپ کن در خواست به یک هدر خواص : میخواهیم فقط به یک هدر درخواست بزنیم و محتوای داخلش رو ببینیم به عنوان مثال هدر ()content-type : import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.post(url) print(request.headers[&quotcontent-type&quot])Response : text/htmlبررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط هدر content-type رو چاپ کن دریافت اطلاعات کلی : ما اینجا فقط میخواهیم اطلاعات وب سایت رو ببینیم به صورت کلی : import requests url = &quothttps://aparat.com/amir.Mr.gamir.com&quot request = requests.post(url) print(request.text)Response : این جا شما یه اطلاعات کلی از لینک مورد نظر میبینید که انقدر زیاد بود که نتوانست اینجا بزارم بررسی کد : خط اول اومدیم کتابخانه requests رو بارگیری کردیم خط دوم اومدیم یک متغیر ساختیم توش آدرس سایت مورد نظر رو ریختیم خط سوم اومدیم یک متغیر ساختیم توش گفتیم یک درخواست با متد post بزن به متغیر خط دوم که میشه آدرس سایت ما ، و همه اینا رو ریختیم توی متغیر request خط چهارم اومدیم درخواست رو چاپ کردیم ولی بهش گفتیم فقط محتوای text رو چاپ کنتوجه کنید تمامی این متد ها باید بر اساس متدی که وب سایت پشتییبانی میکنه بزنید مثال اگه وب سایت فقط get پشتیبانی میکنه شما نمیتوانید post بزنید و از کجا بفهمیم یک وب سایت از چه متد هایی پشتیبانی میکنه ؟ با ما همراه باشید : توی وب سایت مورد نظر راست کلیک میکنید و گزینه Inspect میزنین و به قسمت Networks رفته و صفحه رو refresh کنید و بعد روی قسمت اول که داخل Networks میاره کلیک کنید و بعدش قسمت Request Method میتوانید ببنید اما فقط یکی مینویسه یا GET یا POST یا... که ممکنه از هر دو پشتیبانی کنه ولی خب اونی که اونجا مینویسه اصل کاری برای این که بفهمین از متد های دیگه پشتیبانی میکنه یا نه باید دیگه خودتون با متد ها مختلف که بالا گفتم هی تست کنید با برنامه نویسی یا با ابزار burp suite.مارو در شبکه های اجتماعی زیر دنبال کنید ??یوتیوباینستاگرامتلگرامساب ردیتخب تا مقاله های دیگر خدانگهدار ??مقاله های پیشنهاد شدهآشنایی با مدل TCP/IP , آشنایی با مدل OSI , ساخت سرور و کلاینت ساده با پایتون