0
点赞
收藏
分享

微信扫一扫

python 跨域调用

Python跨域调用

在Web开发中,跨域调用是一个常见的需求。当一个网页或一个Web应用需要从不同的域名下获取数据或调用接口时,就需要进行跨域调用。本文将介绍什么是跨域调用以及如何在Python中实现跨域调用。

什么是跨域调用?

跨域调用是指在浏览器中,通过JavaScript代码从一个域名下的网页向另一个域名下的网页或接口发起请求。浏览器的同源策略限制了这种跨域行为,即只有在域名、协议和端口完全相同的情况下,才能进行跨域调用。否则,浏览器会阻止这种非同源的请求。

跨域调用通常用于在前端页面中获取数据或调用第三方接口,以实现数据的共享和交互。在Python中,可以通过一些方式实现跨域调用,如JSONP、CORS、代理等。

JSONP

JSONP(JSON with Padding)是一种跨域调用的解决方案,它通过动态创建<script>标签来实现跨域请求,并将返回的数据作为回调函数的参数传递给前端页面。

下面是一个使用JSONP进行跨域调用的示例代码:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
callback = request.args.get('callback')
data = {'name': 'John', 'age': 25}
response = jsonify(data)
response.headers.add('Access-Control-Allow-Origin', '*')
return callback + '(' + response.get_data().decode() + ')'

if __name__ == '__main__':
app.run()

在上述代码中,我们使用Flask框架创建了一个简单的API接口,该接口返回一个JSON对象。通过在URL的查询参数中指定callback参数,我们可以获取到前端页面传递的回调函数名。然后,我们将返回的数据包装在回调函数中返回给前端页面。

在前端页面中,可以通过以下方式调用该接口:

function processData(data) {
console.log(data);
}

var script = document.createElement('script');
script.src = '
document.body.appendChild(script);

上述代码中,我们创建了一个<script>标签,将接口的URL指定为src属性,并在查询参数中指定回调函数名。通过动态创建<script>标签,可以绕过浏览器的同源策略,从而实现跨域调用。

CORS

CORS(Cross-Origin Resource Sharing)是一种在现代浏览器中支持的跨域调用机制,它通过在服务器端设置响应头来允许跨域请求。

下面是一个使用CORS进行跨域调用的示例代码:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
data = {'name': 'John', 'age': 25}
response = jsonify(data)
response.headers.add('Access-Control-Allow-Origin', '*')
return response

if __name__ == '__main__':
app.run()

在上述代码中,我们通过在响应头中添加Access-Control-Allow-Origin字段,将其值设置为*,表示允许任意域名下的请求访问该接口。这样,前端页面就可以直接通过AJAX等方式调用该接口,实现跨域调用。

代理

代理是一种常见的跨域调用解决方案,它通过在同源的服务器端设置一个代理接口,将跨域的请求转发到目标域名下的接口。

下面是一个使用代理进行跨域调用的示例代码:

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
url = '
response = requests.get(url)
return response.content

if __name__
举报

相关推荐

0 条评论