وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

چگونه با استفاده از فلاسک آدرس IP کاربر را دریافت کنیم؟

0 18
زمان لازم برای مطالعه: 3 دقیقه


معرفی

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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید