Angular - создание службы для использования сокращения URL-адресов Google

Я пытаюсь написать службу для использования сокращателя URL-адресов Google, но сталкиваюсь с проблемой. Ниже представлена ​​моя служба:

  urlShortener(longUrl: string): Observable<string> {
let body = {longUrl: longUrl}
let options = {
  params: {key: XXXXXX},
};
return this.http.post('https://www.googleapis.com/urlshortener/v1/url', body, options)
  .map(response => {
    console.debug('response',response);
    return response;
  })
  .catch(this.handleError);
}

Ошибка Google API:

{
"error": {
 "errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}

}

Нет ошибки при использовании ключа API, поскольку тот же код, написанный на angular1, возвращает shortUrl


person Varun Sukheja    schedule 20.01.2018    source источник


Ответы (2)


Не уверен, но должен предоставить ключ в заголовке авторизации.

Пример:

let headers = new Headers();
    headers.append("Authorization","Basic YW5ndWxhci13YXJlaG91c2Utc2VydmljZXM6MTIzNDU2");
    this.http.post(AUTHENTICATION_ENDPOINT, null, {headers: headers}).subscribe(response => {
      console.log(response);
    });
person Rohit.007    schedule 20.01.2018

После дня борьбы, решил это с помощью http.request вместо использования http.post. Код выглядит следующим образом:

let myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
let myParams = new URLSearchParams();
myParams.append('key', 'XXX-XXXX);

const options = new RequestOptions({
  method: RequestMethod.Post,
  headers: myHeaders,
  params: myParams,
  url: 'https://www.googleapis.com/urlshortener/v1/url',
  body: {longUrl: longUrl}
});
const req = new Request(options);

return this.http.request(req)
  .map(response => {
    console.debug('response', response.json().id);
    return response.json().id;
  })
  .catch(this.handleError);
person Varun Sukheja    schedule 21.01.2018