【发布时间】:2018-11-29 20:01:36
【问题描述】:
我有这个用于登录请求的函数。
private login(params: LoginParams): Promise<any> {
const loginHeaders: HttpHeaders = new HttpHeaders()
.set('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8')
.set('site', 'first');
const loginCredentials = new HttpParams()
.set('j_username', params.username)
.set('j_password', params.password);
const requestUrl = this.appConfig.baseUrl + 'restoftheurl';
return this.http
.post(requestUrl, loginCredentials.toString(),
{headers: loginHeaders, responseType: 'text'})
.toPromise();
}
如果密码中有一个加号 (+),它会被编码为一个空格符号,然后请求失败,因为它是一个错误的凭据。如何保留加号?我做错了什么?
【问题讨论】:
-
你需要将它的 URL 编码为
%2B,+确实意味着 URL 中的空格(参见例如 stackoverflow.com/questions/2678551/…)。虽然你会被这个错误击中:github.com/angular/angular/issues/18261 -
哦!所以这是一个错误。我以为我要疯了。
-
不,这不是错误,url 字符串中的任何特殊字符都被认为是不安全的,并且可能会危及网络服务器,想想 url 中黑客的恶意脚本。
-
刚发现我几乎复制了:stackoverflow.com/questions/45428842/…