AmirTorn
AmirTorn
خواندن ۱۰ دقیقه·۲ سال پیش

چند تا درخواست ساده 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 , ساخت سرور و کلاینت ساده با پایتون
برنامه نویسیپایتونpython
من امیرحسین سلطانی هستم من از بچگی به بازی های ویدیویی علاقه داشتم و اخیرا به برنامه نویسی و هک و امنیت در زمینه تست نفوذ وب و علاقه پیدا کردم. مایلم تجربیاتم را با شما دوستان عزیز به اشتراک بگذارم.
شاید از این پست‌ها خوشتان بیاید