Действительно ли возможно Выполнить Междоменные Запросы в JavaScript И Наборе Пользовательские Заголовки?

Так как Вы не можете применить пользовательские заголовки на вызовы JSONP, как я выполняю перекрестные доменные запросы И применяю пользовательские заголовки с помощью jQuery?

Я в основном пытаюсь получить доступ к документам Google с jQuery и должен передать аутентификационный маркер:

var token = "my-auth-token";
$.ajax({
  url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
  dataType: 'json',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  }
});

Примечание: Цель этого состоит в том, чтобы полностью обойти прикладной уровень. Просто использовать рубин для соединения с Google Data API, но это поднимает много ресурсов, анализирующих подачу все время серверная сторона.

5
задан Community 23 May 2017 в 11:53
поделиться

3 ответа

Вы можете использовать клиентскую библиотеку Google JavaScript для запроса API Документов. Хотя он не поставляется с помощниками специально для Документов, его все же можно использовать с большинством API, включая Документы. См. Это сообщение в блоге сотрудника Google, в котором показан рабочий пример.

Если вы попадаете в бесконечный цикл авторизации, см. Этот вопрос из групп Google. По сути, файлы cookie устанавливаются недостаточно быстро, поэтому при проверке клиентской библиотекой JavaScript она ничего не находит и перенаправляет на страницу авторизации OAuth. Решение состоит в том, чтобы либо добавить небольшую задержку перед выполнением проверки, либо использовать кнопку входа в систему, которая инициирует авторизацию, вместо того, чтобы делать это при загрузке страницы.

Вам также потребуется добавить на свою страницу любое изображение, которое находится в том же домене. Его можно скрыть с помощью CSS, пока он находится в DOM.

Используя пример из приведенного выше сообщения в блоге, я смог получить список документов только с помощью JavaScript. Вот модифицированная функция инициализации, которую я использовал, чтобы избавиться от бесконечного цикла авторизации:

function initialize() {
    var scope = 'http://docs.google.com/feeds/';

    if (google.accounts.user.checkLogin(scope)) {
        var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');   
        service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);  
    } else {
        var loginButton = $("<button>Click here to login</button>");
        loginButton.click(function() {
            var token = google.accounts.user.login(scope); // can ignore returned token  
        });
        $("body").append(loginButton);
    }
};  
​
5
ответ дан 14 December 2019 в 04:30
поделиться

Подумайте о том, чтобы написать код на стороне сервера, который играет за прокси, и пусть jQuery вызывает его.

  • Если вы используете PHP, используйте curl .
  • Если вы используете Java, используйте URLConnection или более удобный Apache HttpClient .
  • Если вы используете C # /. NET, используйте WebClient .
  • Если вы используете Ruby, используйте Net :: HTTP .
3
ответ дан 14 December 2019 в 04:30
поделиться

Можно, если это позволяет внешний домен, отправив соответствующий заголовок Access-Control-Allow-Origin . Затем просто используйте API XMLHttpRequest в браузерах, которые поддерживают стандартный междоменный API XHR и XDomainRequest в IE.

0
ответ дан 14 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: