Помогите c обходом CORS
Всем доброго времени суток!
Редко прошу помощи помощи на форумах, но уже сил нет искать решение. Суть вопроса: отправляю запрос через ajax, в ответ получаю блокировку по причине - No 'Access-Control-Allow-Origin' header is present on the requested resource. Код с аяксом
$.ajax({
url: url,
dataType: 'json',
type: 'GET',
async: false,
crossDomain: true,
cache:false,
headers: {
'Access-Control-Allow-Origin': '*'
},
complete: function (data,status,XHR) {
console.log(data)
},
error:function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
console.log(textStatus);
console.log(errorThrown);
}
});
пример ссылки куда отправляю запрос __https://api.openload.co/1/file/dl?file=st_pJ9IrdpQ&ticket=st_pJ9IrdpQ~6ad74ad4258 33d50~1511105366~def~F8R1rW64_fhOKxW0~1~zwPU4n9W4u caGyqf&captcha_response=c417 В ответ приходят JSON данные. ![]() Можно ли как-то обойти это блокировку и вернуть в браузер ответ? Заранее спасибо за любые советы! |
Access-Control-Allow-Origin': '*' к чему этот заголовок ? вы сервер?
|
Нет )) Это мои пробы... не убрал.
Да, кстати, забыл написать... Решение путем отправки запроса на свой сервак, и получение ответом чрез PHP не подходит, т.к. запрос привязан IP . |
Сейчас делаю запрос с такими параметрами
$.ajax({
url: url,
dataType: 'jsonp',
type: 'GET',
async: false,
crossDomain: true,
cache:false,
contentType: "application/json; charset=utf-8",
complete: function (data) {
console.log( data )
},
error:function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
console.log(errorThrown);
}
});
т.е. при смене dataType в jsonp и указании contentType блокировки нет, но теперь есть ошибка ![]() |
странно... А должно так работать ?
|
Если конечный сервер не разрешает загрузку с себя тем самым хэдером или предоставляя jsonp, то напрямую вы не получите ответ никак. Вообще.
Тут потребуется либо договариваться с сервисом, что самый правильный но и самый утопичный вариант, либо использовать прокси. В качестве прокси лучше само собой свой сервер, но если очень надо и пофиг на зависимости и долговременную перспективу, то можно воспользоваться например сервисом yahoo:
<script>
getByYahoo(
'https://api.openload.co/1/file/dl?file=st_pJ9IrdpQ&ticket=st_pJ9IrdpQ~6ad74ad425833d50~1511105366~def~F8R1rW64_fhOKxW0~1~zwPU4n9W4ucaGyqf&captcha_response=c417',
function (json){
alert(JSON.stringify(json, 0, '\t'))
}
)
function getByYahoo(url, callback){
var key = 'callback' + (Math.random() * 1e8 | 0);
window[key] = callback;
var script = document.createElement('script');
script.onload = function(){
script.parentNode.removeChild(script);
delete window[key]
}
script.error = function(){
script.onload();
callback(false);
}
script.src = 'http://query.yahooapis.com/v1/public/yql?q='
+ encodeURIComponent('select * from json where url="' + url + '"')
+ '&format=json&callback=' + key;
document.documentElement.appendChild(script);
}
</script>
|
вопрос: а без CORS не получится скачать контент с сервера?
|
Запрос привязан к IP, но нельзя сделать запрос через свой сервер? А если сервер на том же IP? PHP/Node.js?
Еще не совсем понятно, откуда именно и с помощью чего делается запрос. Через GM_xmlhttpRequest Greasemonkey/Tampermonkey или свое расширение не вариант? |
Цитата:
|
| Часовой пояс GMT +3, время: 00:29. |