Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите c обходом CORS (https://javascript.ru/forum/misc/71445-pomogite-c-obkhodom-cors.html)

rogodessa 19.11.2017 18:53

Помогите 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 данные.



Можно ли как-то обойти это блокировку и вернуть в браузер ответ?

Заранее спасибо за любые советы!

Lion777 19.11.2017 19:04

Access-Control-Allow-Origin': '*' к чему этот заголовок ? вы сервер?

rogodessa 19.11.2017 19:08

Нет )) Это мои пробы... не убрал.

Да, кстати, забыл написать... Решение путем отправки запроса на свой сервак, и получение ответом чрез PHP не подходит, т.к. запрос привязан IP .

rogodessa 19.11.2017 19:42

Сейчас делаю запрос с такими параметрами

$.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

блокировки нет, но теперь есть ошибка


Lion777 19.11.2017 19:55

странно... А должно так работать ?

Aetae 20.11.2017 02:41

Если конечный сервер не разрешает загрузку с себя тем самым хэдером или предоставляя 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>

mikello 20.11.2017 10:25

вопрос: а без CORS не получится скачать контент с сервера?

jerseybb 20.11.2017 15:12

Запрос привязан к IP, но нельзя сделать запрос через свой сервер? А если сервер на том же IP? PHP/Node.js?

Еще не совсем понятно, откуда именно и с помощью чего делается запрос. Через GM_xmlhttpRequest Greasemonkey/Tampermonkey или свое расширение не вариант?

Aetae 20.11.2017 18:22

Цитата:

Сообщение от mikello (Сообщение 470685)
вопрос: а без CORS не получится скачать контент с сервера?

Чистым клиентом - нет. История старая как мир. Если сервер не разрешает, то на клиенте с левого сайта не получить конетент никак. Контент можно воспроизвести: картинки там, видео, скрипты, но получить содержимое для обработки - нет. Конец истории.


Часовой пояс GMT +3, время: 11:21.