passshift
@passshift
php, js, html5, css

Как парсить json с чужого сервера?

Здравствуйте!

как парсить? На js не получается, ругается на Access-Control-Allow-Origin, через iframe тоже не выходит, сайт не отображается во фрейме.
  • Вопрос задан
  • 1161 просмотр
Решения вопроса 1
@remzalp
Программер чего попало на чем попало
Просто по запросу ссылки отдаётся html страница, в ней JS код, который проверяет наличие куки c нужным именем и IP адресом, если нету - устанавливает её и перезагружает страницу
Фрагмент установки: setCookie('Y...6', '1.2.3.4', 10);

Для того, чтобы выяснить минимальный набор заголовков, который надо передавать - используйте Chrome, инструменты разработчика, вкладка Network, правым кликом на запросе - "Copy as Curl (cmd)".

Для тестирования скачать curl for windows, крутить запрошенный текст в командной строке, по одному убирая параметры -H

Еще будет полезен ключик -k, чтобы не ругалось на сертификаты:
curl -k "https://...." .....

Когда удалось вполне разумно руками получать результат, пишите то же самое на PHP. PHP cURL справляется на ура.

Соответственно вся логика - запрашивается страница с нужными заголовками, если отдали html, то проанализировать значение куки, поправить в запросе и переслать заново. Для совсем первого запроса запрашивать без куки, для следующих - сохранять.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
alsopub
@alsopub
Загрузить при помощи php и распарсить или отдать своему скрипту.
Ответ написан
XNoNAME
@XNoNAME
Эникейщик
Есть еще вариант с proxy_pass

UPD: Если у вас сервер nginx, то вот пример настройки:
server{
    listen 9292;
    server_name foo.example.com;
    location / {
        add_header Access-Control-Allow-Origin *;
        proxy_pass http://api.apiserver.ru;
    }
}


Далее делаете запрос не на api.apiserver.ru/any_request.php?a=1&b=2
а на http://ваш_сервер:9292/any_request.php?a=1&b=2
Ответ написан
Комментировать
Bowen
@Bowen
Японский бог
Попробуйте так:
$.ajax({
     url: "http://othersize.ru/testserver.php",
     dataType: 'jsonp', 
     success: function(json){
         console.log(json);
     }
});

P.S. Сам лично не пробовал, не приходилось еще.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы