از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه با استفاده از فلاسک آدرس IP کاربر را دریافت کنیم؟
سرفصلهای مطلب
معرفی
Flask یکی از محبوب ترین چارچوب های توسعه وب پایتون است. این یک چارچوب وب سبک وزن است، اما روشهای داخلی مختلفی را ارائه میکند که میتوانند برای استقرار بدون دردسر برنامههای کاربردی وب کارآمد استفاده شوند.
در این راهنما، آدرس IP کاربری را که از برنامه وب ایجاد شده با استفاده از Flask بازدید می کند، دریافت می کنیم.
ما یک REST API ساده ایجاد خواهیم کرد که درخواستهای دریافتی را مدیریت میکند /
نقطه پایانی، آدرس IP کاربر را به عنوان پاسخ برمی گرداند.
ایجاد یک برنامه وب پایه با استفاده از Flask
یک پروژه Flask جدید برای این آموزش ایجاد کنید. ما یک برنامه اساسی ایجاد می کنیم که برمی گردد “سلام دنیا” با درخواست به /
نقطه پایانی:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<h1> Hello World</h1>'
if __name__ == '__main__':
app.run(debug=True)
اکنون که برنامه خود را راه اندازی کرده ایم، بیایید آدرس های IP مرتبط با درخواست کاربر را جمع آوری کنیم.
چگونه آدرس IP یک کاربر را در فلاسک پیدا کنیم؟
هر زمان که مشتری درخواست یک page – آنها ارسال می کنند HTTP GET درخواست، با بار مشخص. در میان اطلاعات دیگر – آدرس IP متمایز آنها گنجانده شده است. در فلاسک – هر مسیر دسترسی دارد به request
متغیر، که نشان دهنده درخواست دریافتی از کاربر است.
از این request
، می توانیم عناصر مختلفی را استخراج کنیم – و آدرس IP به عنوان نشان داده می شود remote_addr
ویژگی:
@app.route('/')
def hello_world():
ip_addr = request.remote_addr
return '<h1> Your IP address is:' + ip_addr
ما همچنین می توانیم آدرس راه دور را از طریق محیط زمینه درخواست دریافت کنیم. این environ
فرهنگ لغت از request
شی کلیدهای مختلف و مقادیر مربوط به آنها مربوط به درخواست را در خود دارد. این REMOTE_ADDR
یکی از متغیرهای سرور (کلید) است که به آدرس IP مشتری یا سرور نگاشت می شود:
@app.route('/client')
def client():
ip_addr = request.environ('REMOTE_ADDR')
return '<h1> Your IP address is:' + ip_addr
اما اگر کاربر شما درخواستی را پشت پراکسی ارسال کند، دو گزینه بالا کار نمی کنند. در این صورت باید سرصفحه های درخواست را بررسی کنیم. به طور خاص، ما به دنبال آن هستیم HTTP_X_FORWARDED_FOR
سرتیتر:
@app.route('/proxy-client')
def proxy_client():
ip_addr = request.environ('HTTP_X_FORWARDED_FOR')
return '<h1> Your IP address is:' + ip_addr
در حال حاضر، حتی این رویکرد نیز اگر هدر تنظیم نشده باشد، کار نخواهد کرد. بنابراین یک استراتژی رایج استفاده از آن است get()
به این ترتیب که اگر هدر تنظیم نشده باشد، می توانیم به طور پیش فرض آدرس راه دور را انتخاب کنیم:
@app.route('/proxy-client')
def proxy_client():
ip_addr = request.environ.get('HTTP_X_FORWARDED_FOR', request.remote_addr)
return '<h1> Your IP address is:' + ip_addr
توجه داشته باشید: تلاش برای بدست آوردن یک مقدار از یک کلید ناموجود برمی گردد None
. این get()
روش از dict
class به شما امکان می دهد یک مقدار پیش فرض برای استفاده در if تنظیم کنید get()
موفق به یافتن کلید نمی شود اگر HTTP_X_FORWARDED_FOR
است None
request.remote_addr
مقدار به جای آن استفاده می شود.
با در نظر گرفتن این موارد، میتوانیم یکی از سه روش زیر را برای دریافت آدرس IP کاربر از طریق درخواست دریافتی آنها انتخاب کنیم:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
ip_addr = request.remote_addr
return '<h1> Your IP address is:' + ip_addr
@app.route('/client')
def client():
ip_addr = request.environ('REMOTE_ADDR')
return '<h1> Your IP address is:' + ip_addr
@app.route('/client')
def proxy_client():
ip_addr = request.environ.get('HTTP_X_FORWARDED_FOR', request.remote_addr)
return '<h1> Your IP address is:' + ip_addr
if __name__ == '__main__':
app.run(debug=True)
نتیجه
در این مقاله سه روش مختلف برای بدست آوردن آدرس IP کاربر را یاد گرفتیم. ما مستقیماً به آدرس راه دور دسترسی داریم request.remote_addr
، از طریق REMOTE_ADDR
کلید از request.environ
و در مواردی که کاربر از پروکسی استفاده می کند باید آن را بررسی کنیم HTTP_X_FORWARDED_FOR
کلید از request.environ
.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-07 15:49:03