sports site playground information google auth angularjs http google-api google-contacts

angularjs - playground - google contacts site



405 Error con la solicitud POST(AngularJS $ http) (2)

Deseo hacer una solicitud posterior en la API de Contactos de Google con AngularJS $ http.

Traté de hacer esto:

var config = { headers: { // "Content-Type": "application/json", "Authorization": "Bearer " + gapi.auth.getToken().access_token, "GData-Version": "3.0" } } var data = { "test": "test" } $http.post(''https://www.google.com/m8/feeds/contacts/default/full/'', data, config);

Pero devuelve " XMLHttpRequest no puede cargar https://www.google.com/m8/feeds/contacts/default/full/ . Response for Preflight tiene un código de estado HTTP no válido 405 "

Esta solicitud funciona (devuelve 201 creado) en un cliente de Rest como Postman.

Si alguien podría explicarme por qué este método no está permitido desde un navegador.


Creo que el problema es que la API https://www.google.com/m8/feeds/contacts simplemente no es compatible con las solicitudes OPTIONS . La respuesta 405 básicamente dice que el punto final no admite la solicitud OPTIONS , no necesariamente que no sea compatible con POST .

La solución es usar la propia biblioteca API de JavaScript de Google en lugar del servicio $http de Angular.

Puede usar la biblioteca cliente de JavaScript para interactuar con las API de Google, como Personas, Calendario y Drive, desde sus aplicaciones web.

También hay algo de documentación sobre cómo la biblioteca API de Google admite solicitudes CORS.

Puede haber algunas versiones encuadernadas angulares de esta biblioteca para hacer su vida un poco más fácil sin embargo no he buscado.


10.4.6 405 Método no permitido

El método especificado en la línea de solicitud no está permitido para el recurso identificado por el URI de solicitud. La respuesta DEBE incluir un encabezado Permitir que contenga una lista de métodos válidos para el recurso solicitado.

Por lo tanto, compruebe qué método GET / POST / PUT / OPTIONS ... se espera del servidor y utilícelo en su llamada.