当前位置: 首页 > 知识库问答 >
问题:

向HttpClient添加HTTP头不会发送头,为什么?

苗盛
2023-03-14

这是我的密码:

import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
logIn(username: string, password: string) {
    const url = 'http://server.com/index.php';
    const body = JSON.stringify({username: username,
                                 password: password});
    const headers = new HttpHeaders();
    headers.set('Content-Type', 'application/json; charset=utf-8');
    this.http.post(url, body, {headers: headers}).subscribe(
        (data) => {
            console.log(data);
        },
        (err: HttpErrorResponse) => {
            if (err.error instanceof Error) {
                console.log('Client-side error occured.');
            } else {
                console.log('Server-side error occured.');
            }
        }
    );
}

这里是网络调试:

Request Method:POST
Status Code:200 OK
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:46
Content-Type:text/plain

数据存储在请求有效载荷中,但在我的服务器中没有收到POST值:

print_r($_POST);
Array
(
)

我相信这个错误来自于帖子中没有设置标题,我做错了什么?

共有3个答案

翁凯定
2023-03-14

在http请求中设置如下所示的http头

return this.http.get(url, { headers: new HttpHeaders({'Authorization': 'Bearer ' + token})
 });
罗河
2023-03-14

要添加倍数参数或标头,可以执行以下操作:

constructor(private _http: HttpClient) {}

//....

const url = `${environment.APP_API}/api/request`;

let headers = new HttpHeaders().set('header1', hvalue1); // create header object
headers = headers.append('header2', hvalue2); // add a new header, creating a new object
headers = headers.append('header3', hvalue3); // add another header

let params = new HttpParams().set('param1', value1); // create params object
params = params.append('param2', value2); // add a new param, creating a new object
params = params.append('param3', value3); // add another param 

return this._http.get<any[]>(url, { headers: headers, params: params })
东门宜
2023-03-14

新的HttpHeader类的实例是不可变的对象。调用类方法将返回一个新实例。所以基本上,你需要做到以下几点:

let headers = new HttpHeaders();
headers = headers.set('Content-Type', 'application/json; charset=utf-8');

或者

const headers = new HttpHeaders({'Content-Type':'application/json; charset=utf-8'});

更新:添加多个标头

let headers = new HttpHeaders();
headers = headers.set('h1', 'v1').set('h2','v2');

或者

const headers = new HttpHeaders({'h1':'v1','h2':'v2'});

更新:接受HttpClient标头的对象映射

由于5.0.0-beta.6现在可以跳过创建一个HttpHeaders对象,直接传递一个对象映射作为参数。所以现在有可能做到以下几点:

http.get('someurl',{
   headers: {'header1':'value1','header2':'value2'}
});
 类似资料:
  • 我正在探索HTTP Origin检查作为Drupal在https://www.drupal.org/node/1803712的CSRF保护的想法 现在我正在测试Origin头是如何通过POST请求到达的,但是Firefox不会在用户登录表单提交上发送Origin头。Chromium和Chrome工作正常,他们发送Origin头。 Firefox版本是36.0.1。我还用一个干净的Firefox安装

  • 我已经阅读了文档和所有相关的问题,但是Angular的XSRF机制对我来说仍然不起作用:我无法用自动附加的X-XSRF-TOKEN头发出POST请求。 我有一个角6应用程序与登录表单。 它是Symfony(PHP 7.1)网站的一部分,当Symfony提供Angular应用程序页面时,会发送正确的Cookie(): 我的app.module.ts包括正确的模块: 然后,在服务的方法中,我发出以下h

  • 主要内容:Maven依赖关系,自定义HTTP头示例HTTP消息可以包含许多描述消息属性的标头,例如内容长度,内容类型,授权等。 HttpClient提供了检索,添加,删除和枚举标头的方法。 在下面的教程中,我们将演示如何将自定义HTTP头添加到HttpClient和Http请求方法。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的

  • 我正在编写一个mdp文件,并且我正在寻找一种方法来指定(或修改)客户端为特定演示文稿所做的所有请求的HTTP标头。我想在超文本传输协议请求中添加一个授权字段。我希望在不编辑客户端sw的情况下这样做。 我已经阅读了ISO/IEC 23009-1,但我没有发现任何关于它的信息。有人知道怎么做吗?

  • 我正在实现Apiary的其他同事制作的API。io,在Windows应用商店应用程序项目中。 它们显示了我必须实现的方法的示例: 在这个和其他一些方法中,我需要有一个带有我之前获得的令牌的标头。 如何将该授权标头添加到请求中?

  • 我正在尝试生成一个带有授权标头的HTTP请求: 但此代码生成的请求不包含授权头: Cache-Control:无缓存 access-control-request-method: 来源:http://localhost:3021 接受语言:en-US,en;q=0.8,he;q=0.6 我做错了什么?