خب امروز میخواهیم با استفاده از کتابخانه requests درخواست های HTTP مختلف رو تست کنیم , هدف از ساخت کتابخانه requests در پایتون، ایجاد استانداردهایی برای ارسال و دریافت درخواستهای مبتنی بر HTTP است در این کتابخانه میتوان به کمک APIهای نوشته شده برای برنامه درخواست های مختلف HTTP رو زد.
رفقا شما میتوانید با کتابخانه های دیگه ای هم بزنید ولی ما امروز میخواهیم با کتابخانه requests کار کنیم
پروتکل HTTP چیست ؟
کار را با نصب کتابخانه Requests پایتون شروع میکنیم. دستور زیر را در محیط ترمینال اجرا کنید:
pip install requests
متد POSTاز متدهای پرکاربرد و رایج در درخواستهای مبتنی بر وب است. این متد بیانگر این است که شما سعی در به دست آوردن یا بازیابی اطلاعات از منبع مشخصی از دادهها دارید. برای ایجاد GET Request از متد ()requests.get استفاده میکنیم. برای تست این دستور یک درخواست مبتنی بر GET برای صفحهی آپارات خودم ایجاد میکنیم:
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.get(url) print(request)
Response :
<Response [200]>
خب خب شما در این جا میبیند کد وضعیت 200 شده کد وضعیت 200 چی بود ؟؟؟ یعنی درخواست با موفقیت اجرا شده
اطلاعات به دست آمده از پاسخ، حاوی اطلاعاتی در مورد status code یا کد وضعیت است. کد وضعیت شما را از وضعیت ریکوئست باخبر میکند. برای مثال وضعیت 200 OK به این معناست که ریکوئست شما با موفقیت پاسخ داده شده است. کد 404 NOT FOUND بیانگر این است که منابع مورد جستجوی شما پیدا نشده است. status codeهای بسیاری وجود دارند که میتوانند نشان دهند درخواست شما چگونه پاسخی را دریافت کرده و در چه وضعیتی قرار دارد
کد های وضعیت پروتکل اچ تی تی پی
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.get(url) print(request.status_code)
Response :
200
پاسخ دریافتی برای یک درخواست از نوع GET شامل اطلاعاتی ارزشمند است. با استفاده از متدها و صفات تعریف شده برای Response میتوانید payloadها را در گسترهی وسیعی از فرمتها ببینید برای دیدن محتوای پاسخ (response content) از content. استفاده میکنیم :
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.get(url) print(request.content)
Response :
در پاسخ شما payload های اون وب سایت رو میبیند و انقدر زیاد بودن که نشد اینجا بزارم
قسمت هدر ها اطلاعات زیادی در مورد نوع دادهی موجود در قسمت payload پاسخ و محدودیت زمانی برای مدت cashe کردن پاسخ را به شما ارائه میدهد. برای این منظور از تابع header. استفاده میکنیم:
import requests url = "https://aparat.com/amir.Mr.gamir.com" 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/"6487a280-7665"', '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'}
میخواهیم فقط به یک هدر درخواست بزنیم و محتوای داخلش رو ببینیم به عنوان مثال هدر ()content-type :
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.get(url) print(request.headers["content-type"])
Response :
text/html
ما اینجا فقط میخواهیم اطلاعات وب سایت رو ببینیم به صورت کلی :
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.get(url) print(request.text)
Response :
این جا شما یه اطلاعات کلی از لینک مورد نظر میبینید که انقدر زیاد بود که نتوانست اینجا بزارم
از متد POST برای ارسال اطلاعات از فرم ها و صفحات html به سمت سرور استفاده می شود. معمولا وقتی شما قصد دارید اطلاعات را به سمت سرور ارسال کنید و در آنجا ذخیره کنید از این متد استفاده می شود. یک درخواست POST در کش مرورگر ذخیره نمی شود
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.post(url) print(request)
Response :
<Response [200]>
خب خب شما در این جا میبیند کد وضعیت 200 شده کد وضعیت 200 چی بود ؟؟؟ یعنی درخواست با موفقیت اجرا شده
اطلاعات به دست آمده از پاسخ، حاوی اطلاعاتی در مورد status code یا کد وضعیت است. کد وضعیت شما را از وضعیت ریکوئست باخبر میکند. برای مثال وضعیت 200 OK به این معناست که ریکوئست شما با موفقیت پاسخ داده شده است. کد 404 NOT FOUND بیانگر این است که منابع مورد جستجوی شما پیدا نشده است. status codeهای بسیاری وجود دارند که میتوانند نشان دهند درخواست شما چگونه پاسخی را دریافت کرده و در چه وضعیتی قرار دارد
کد های وضعیت پروتکل اچ تی تی پی
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.post(url) print(request.status_code)
Response :
200
پاسخ دریافتی برای یک درخواست از نوع GET شامل اطلاعاتی ارزشمند است. با استفاده از متدها و صفات تعریف شده برای Response میتوانید payloadها را در گسترهی وسیعی از فرمتها ببینید برای دیدن محتوای پاسخ (response content) از content. استفاده میکنیم :
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.post(url) print(request.content)
Response :
در پاسخ شما payload های اون وب سایت رو میبیند و انقدر زیاد بودن که نشد اینجا بزارم
قسمت هدر ها اطلاعات زیادی در مورد نوع دادهی موجود در قسمت payload پاسخ و محدودیت زمانی برای مدت cashe کردن پاسخ را به شما ارائه میدهد. برای این منظور از تابع header. استفاده میکنیم:
import requests url = "https://aparat.com/amir.Mr.gamir.com" 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/"6487a280-7665"', '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'}
میخواهیم فقط به یک هدر درخواست بزنیم و محتوای داخلش رو ببینیم به عنوان مثال هدر ()content-type :
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.post(url) print(request.headers["content-type"])
Response :
text/html
ما اینجا فقط میخواهیم اطلاعات وب سایت رو ببینیم به صورت کلی :
import requests url = "https://aparat.com/amir.Mr.gamir.com" request = requests.post(url) print(request.text)
Response :
این جا شما یه اطلاعات کلی از لینک مورد نظر میبینید که انقدر زیاد بود که نتوانست اینجا بزارم
توجه کنید تمامی این متد ها باید بر اساس متدی که وب سایت پشتییبانی میکنه بزنید مثال اگه وب سایت فقط get پشتیبانی میکنه شما نمیتوانید post بزنید و از کجا بفهمیم یک وب سایت از چه متد هایی پشتیبانی میکنه ؟ با ما همراه باشید :
توی وب سایت مورد نظر راست کلیک میکنید و گزینه Inspect میزنین و به قسمت Networks رفته و صفحه رو refresh کنید و بعد روی قسمت اول که داخل Networks میاره کلیک کنید و بعدش قسمت Request Method میتوانید ببنید اما فقط یکی مینویسه یا GET یا POST یا... که ممکنه از هر دو پشتیبانی کنه ولی خب اونی که اونجا مینویسه اصل کاری برای این که بفهمین از متد های دیگه پشتیبانی میکنه یا نه باید دیگه خودتون با متد ها مختلف که بالا گفتم هی تست کنید با برنامه نویسی یا با ابزار burp suite.
مارو در شبکه های اجتماعی زیر دنبال کنید ??
خب تا مقاله های دیگر خدانگهدار ??
مقاله های پیشنهاد شده
آشنایی با مدل TCP/IP , آشنایی با مدل OSI , ساخت سرور و کلاینت ساده با پایتون