Помогите 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, время: 11:21. |