区分大小写的URL触发CORS错误

时间:2017-06-19 18:04:35

标签: javascript python json url cors

我正在尝试使用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的任何想法,即使包名称的大小写错误了吗?

1 个答案:

答案 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}}提交错误请求他们这样做。