اذهب إلى المحتوى

السؤال

نشر

حاولت إرسال طلب ajax من جانب العميل client في المتصفح إلى عنوان URL خاص بموقع خارجي، ولكن يبدو أن المتصفح لديه مشكلات أمنية في ذلك، حيث يظهر خطأ CORS.

فكرت في إرسال ajax إلى خادم فلاسك Flask لدي، ومن خلال الخادم أقوم بإرسال طلب GET إلى االموقع الخارجي، والحصول على الرد وإرساله مرة أخرى إلى جانب العميل في المتصفح لتخطي خطأ CORS. كيف يمكنني فعل ذلك باستخدام فلاسك Flask؟

 

Recommended Posts

  • 1
نشر

بدلا من ذلك فكر في حل المشكلة المتعلقة ب ajax فكر في اختصار تلك الحلقة وزمن تنفيذها , قد تكون المشكلة متعلقة بنوع البيانات dataType المعلن عنها في طلبك على سبيل المثال يمكنك إرفاق التالي:

dataType: 'json' 
//OR
dataType: 'jsonp' 

إلى الطلب الخاص بك.

أيضا تحتاج إلي إضافة CORS لطلبك وربما إلى:

"Access-Control-Allow-Origin"

ولا تزال هناك خيارات وحلول أخرى, وبالطبع لا يمكننا معرفة الحل الأمثل بدون رؤية الطلب الذي تقوم بإرساله,والخطأ الذي يواجهك.

ومع ذلك قد تكون الأخطاء التي تواجهك عن ارسال طلب إلي موقع او خادم آمن https من خلال عنوان غير آمن,, تعد CORS مهمة في هذا الشأن, بإختصار تدعم آلية CORS الطلبات عبر المصدر الآمن ونقل البيانات بين المتصفحات والخوادم.

أما عن تنفيذ الفكرة التي تفكر بها ,ففيما يلي مثال على تنفيذها,

1-: send_from_ajax.html

<!DOCTYPE HTML>
<html>
<head>
<title>Send from AJAX Teo Flaskt</title>
    <script>
        function getData()
        {
            var req = new XMLHttpRequest()
            req.onreadystatechange = function()
            {
                if (req.readyState == 4)
                {
                    if (req.status != 200)
                    {
                        //error handling code here
                    }
                    else
                    {
                        var response = JSON.parse(req.responseText)//يمكنك الاستفادة من الرد في اي شئ اخر
                        document.getElementById('testdiv').innerHTML = response.data
                    }
                }
            }
        
            req.open('POST', '/from_ajax')
            req.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
            req.send('test')
            
            return false
        }
    </script>
</head>
<body>
   <h1>Send from AJAX Teo Flask</h1>
   <form action="" method="POST">
       <input type="button" value="Send request" onclick="return getData()">
   </form>
   <h1>Result</h1>
   <div id="testdiv"></div>
</body>
</html>

2-: main.py

from flask import (Flask, render_template, jsonify)
import requests

app = Flask(__name__, template_folder='template')

URL = 'https://example.com/test'

@app.route('/')
def index():
    return render_template('send_from_ajax.html')
        
        
@app.route('/from_ajax', methods = ['POST'])
def ajax_request():
    req = requests.get(URL).text
    return jsonify(data=req)
    
    
if __name__ == "__main__":
    app.run(debug = True)

وستجد في المرفقات صوراً للنتيجة 

ويمكن استخدام response الموجودة في طلب ajax في اي عملية اخرى,او اختبار آخر والعكس صحيح اي إرسال url من خلال طلب اجاكس يتم معالجته من خلال flask واعادة ارسال الناتج إلي ajax والذي يتولى مسؤولية عرضه داخل الصفحة الخاصة بنا..

ومع هذا قد لا تكون طريقة منطقية او مناسبة اللهم في حالات مختلفة تتشابه مع مفاهيم vpn أو بالأحري Proxy, بمعنى أننا قد نحتاج الى إرسال طلب ما إلي خادم او موقع محظور على مستخدمينا الوصول إليه ,فهنا يمكن تثبيت flask على خادم مسموح له بالوصول إلى الموقع أو الخادم المحظور بينما نرسل نحن أو المستخدمين فقط إلى flask ونتلقى النتائج من خلاله ذات الصفحة على المتصفح دون الحاجة إلى proxy وما شابه.

بالتوفيق

 

Screenshot_386.png

InkedScreenshot_384_LI.jpg

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...