我正在尝试使用JavaScript访问http://pypi.python.org/pypi/<package_name>/json
形式的Python包对应的JSON metadata。
我的代码看起来像这样:
var name = $('#name').val();
var url = 'http://pypi.python.org/pypi/' + name + '/json';
$.getJSON(url, function(result){
console.log(result);
});
问题是json的url区分大小写,所以例如pypi.python.org/pypi/flask/json被重定向到pypi.python.org/pypi/Flask/json,因为包'Flask '需要有资本F.
因此,如果name
是烧瓶,我会收到错误XMLHttpRequest cannot load https://pypi.python.org/pypi/flask/json. Redirect from 'https://pypi.python.org/pypi/flask/json' to 'https://pypi.python.org/pypi/Flask/json' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
有关如何正确访问json的任何想法,即使包名称的大小写错误了吗?
答案 0 :(得分:1)
如果您通过开放的CORS代理提出请求,它应该有效;尝试将代码更改为:
var url = 'https://cors-anywhere.herokuapp.com/http://pypi.python.org/pypi/'
+ name + '/json';
通过https://cors-anywhere.herokuapp.com发送请求,https://sourceforge.net/p/pypi/support-requests/是一个开放的CORS代理,它向其添加Access-Control-Allow-Origin
响应标头,然后将其作为响应传递回您的请求前端代码。
带有Access-Control-Allow-Origin
响应标头的重定向响应是浏览器看到的,因此浏览器实际上会遵循重定向而不是停止。
所有人说,似乎pypi.python.org网站应该在他们的3xx重定向响应中包含Access-Control-Allow-Origin
响应标头,因此您可以考虑在{{3}}提交错误请求他们这样做。