我正在建立一个网站,当按下网站上的按钮时,该网站需要对python脚本进行XMLHttpRequest调用(在第三方网站上)。然后,python脚本将对数据进行更改,然后将其返回到网站。
如果我调用现有的API测试器,例如https://reqres.in/api/users?page=2
,就可以使用此功能但是,当我调用托管在我的网站上的自己的python脚本时,它不起作用。
这是我的网站https://example.com
上托管的python脚本的代码:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def testing():
return jsonify(test="Hello")
if __name__ == '__main__':
app.run()
...这是旨在从上述python脚本中获取数据的代码。
var myRequest = new XMLHttpRequest();
myRequest.open('GET', 'https://example.com');
myRequest.onreadystatechange = function () {
if (myRequest.readyState === 4) {
alert(myRequest.responseText);
}
}
document.getElementById("myButton").addEventListener("click",
function() {
myRequest.send();
}
);
如前所述,如果我使用已建立的API示例,例如https://reqres.in/api/users?page=2而不是https://example.com
,那么它可以正常工作,因此我确定这是python脚本的问题,但是我可以因为没有错误消息,所以无法弄清楚。
答案 0 :(得分:1)
这似乎是CORS问题。当从服务器A加载的网页正在将请求(通过XMLHttpRequest)发送到服务器B时,我们将面临跨域资源共享(CORS)场景。这种请求必须满足某些要求(如https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS中所述)。
长话短说,服务器B(此处为example.com)必须在其响应中提供额外的标头:
Access-Control-Allow-Origin: http://server-a-domain.com
以下内容也可以。顺便说一下,这就是您的示例服务器regres.in返回的内容。
Access-Control-Allow-Origin: *
如果您使用的是Flask,请查看似乎可以提供通用解决方案的Flask-CORS:https://flask-cors.readthedocs.io/en/latest/