在Angular2中发送带有标头的HTTP请求

时间:2016-09-29 14:27:47

标签: angularjs curl angular typescript ecmascript-6

我正在尝试构建一个连接到twitter API的应用程序。为此,我需要使用Angular2发送带有一组头的http get请求。

注意,下面的curl请求是成功的(假设有正确的密钥)。

这是我尝试的,唯一的问题是,通过以下实现,我无法传递必要的标题。

想知道是否有人遇到过此问题,并对如何解决有任何建议?

提前致谢

constructor(private _http: Http) {

}

getTwitterResponse() {
         return this._http.get('https://api.twitter.com/1.1/statuses/home_timeline.json')
            .map(res => res.text);
}

带有标题的卷曲请求样本(已删除授权密钥)

 curl --get 'https://api.twitter.com/1.1/statuses/home_timeline.json' --header 'Authorization: OAuth oauth_consumer_key="123456", oauth_nonce="123456", oauth_signature="f%123456%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1475158916", oauth_token="123456", oauth_version="1.0"' --verbose

1 个答案:

答案 0 :(得分:2)

您可以像这样在请求中添加标题:

import { Headers, RequestOptions } from '@angular/http';    

getTwitterResponse() {

let headers = new Headers({ "Content-Type": "application/json" });
let options = new RequestOptions({ headers: headers });
let url = 'https://api.twitter.com/1.1/statuses/home_timeline.json';

     return this._http.get(url, options).map(res => res.text);
}

对此处发生的事情的说明:get的请求Http具有以下签名:

get(url: string, options?: RequestOptionsArgs)

第二个参数是可选的,它的类型是RequestOptionsArgs,它是用于构造RequestOptions的接口,这意味着您可以将RequestOptions传递给get as第二个论点。 RequestOptionsArgs是具有以下属性的接口:

export interface RequestOptionsArgs {
    url?: string;
    method?: string | RequestMethod;
    search?: string | URLSearchParams;
    headers?: Headers;
    body?: any;
    withCredentials?: boolean;
    responseType?: ResponseContentType;
}

所有属性都是可选的,这就是我们只能将headers传递给options的原因。您可以使用任何内容更改Content-Type,并且可以添加多个标题:

headers: Headers = new Headers({
    'First header': 'First value',
    'Second header': 'Second value',
    'Third header': 'Third value',
    'Fourth header': 'Fourth value'
});

您可以在以下链接中详细了解我刚刚提到的所有内容: