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__