2017-06-19 25 views
1

我正在嘗試使用JavaScript訪問與http://pypi.python.org/pypi/<package_name>/json形式的Python包對應的JSON metadata區分大小寫的網址觸發CORS錯誤

我的代碼看起來是這樣的:

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中/瓶/ JSON因爲包「瓶」需要有一個資金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即使包名也有wro大寫?

+0

似乎與pypi的問題重定向時沒有正確設置標題。 JSONP也不起作用,因爲'https://pypi.python.org/pypi/Flask/json?callback = f'按預期工作('f({...})'),但是'https:/ /pypi.python.org/pypi/flask/json?callback = f「重定向到大寫字母F,並且不迴應回調(它發送'{...}') – Artyer

回答

1

如果您通過開放的CORS代理髮出請求,它應該可以工作;試着改變你的代碼:

var url = 'https://cors-anywhere.herokuapp.com/http://pypi.python.org/pypi/' 
    + name + '/json'; 

這會通過https://cors-anywhere.herokuapp.com的請求,這增加了Access-Control-Allow-Origin響應頭,然後開CORS代理通過該回你的請求前端代碼作爲響應。

重定向響應與Access-Control-Allow-Origin響應頭是瀏覽器看到的,所以瀏覽器實際上將遵循重定向而不是停止。所有這一切,似乎pypi.python.org網站確實應該在其3xx重定向響應中包含Access-Control-Allow-Origin響應標頭,因此您可以考慮在https://sourceforge.net/p/pypi/support-requests/處提交請求它們的錯誤。