gpt4 book ai didi

Angular HttpClient 行为原始 HTML

转载 作者:太空狗 更新时间:2023-10-29 17:58:39 25 4
gpt4 key购买 nike

我正在使用 Angular 5 HttpClient,我正在尝试从同时提供 json 数据和 HTML 的页面获取 HTML 响应。 (Spotify 授权)。

当我 curl 时,我得到了预期的 HTML 和 json 负载。无论我用 HttpClient 尝试什么,我所能得到的只是 json,在这种情况下这没有帮助。我想进入 HTML。我已验证我的 header 在命令行 curl 和 HttpClient 之间是相同的。

curl -vvv https://accounts.spotify.com/authorize/?client_id=xxxxxxxxxxxxxxx81ad8fc&response_type=code&redirect_uri=http://reaver.xxxxxx.com:4200/callback&state=34fFs29kd09

<!DOCTYPE html>
<html ng-app="accounts" ng-csp>
<head>
<meta charset="utf-8">
<title ng-bind="(title && (title | localize) + ' - ') + 'Spotify'">Spotify</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<base href="/">
<link href="https://d2d1dxiu3v1f2i.cloudfront.net/a4a5157/css/index.css" media="screen" rel="stylesheet">

<script async defer src="https://www.google.com/recaptcha/api.js"></script>
<script async defer src="https://d2d1dxiu3v1f2i.cloudfront.net/a4a5157/js/index.js" sp-bootstrap></script>
<meta ng-non-bindable sp-bootstrap-data='{"client":{"name":"Playlist Reaver"},"country":"US","useCaptcha":false,"locales":["*"],"BON":["0","0",-795429514]}'>
</head>
<body ng-view></body>
</html>

有效载荷的这一部分是我可以让 HttpClient 向我公开的全部内容。

{"client":{"name":"Playlist Reaver"},"country":"US","useCaptcha":false,"locales":["*"],"BON":["0","0",-795429514]}

通常我会说这很好,但我确实需要访问 HTML。

如何从像这样同时包含 json 数据和 HTML 的响应中获取原始 html?

我的 get 调用如下所示:

return this.http.get(this.apiGeneric, { params: params, observe: 'response'});

附加信息:我的 http header 似乎没有添加。我进行了以下更改,但在 http 请求 header 中看不到 XFF header 。

  // function returns Observable UserResponse object
getUrl() {
this.httpHeaders = new HttpHeaders();
//.set('Content-Type'
this.httpHeaders.set('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8');
this.httpHeaders.set('XFF', 'testing123');

let params = new HttpParams();
const params = new HttpParams()
.set('client_id', this.clientId)
.set('response_type', 'code')
.set('redirect_uri', this.redirectUri)

console.log(params);
return this.http.get(this.apiGeneric, { headers: this.httpHeaders, params: params, observe: 'response' });
}

最佳答案

好的,我发现了问题。这可能是我对生成 header 的误解,但我发现的是:

this.httpHeaders = new HttpHeaders();
this.httpHeaders.set('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8');

(.set 和 .add)将导致一个空的 httpHeaders

改变我构建 header 的方式解决了我的问题,内容类型 header (和一些客户测试 header )被插入,我得到了完整的 HTML 输出。如果其他人遇到这个问题,这里是构建解决我的问题的 header 的正确方法:

const headers = new HttpHeaders({
Accept:'text/html',
XFF:'testing123'
});

const params = new HttpParams()
.set('client_id', this.clientId)
.set('response_type', 'code')
.set('redirect_uri', this.redirectUri)

console.log(headers.get('Accept'));
console.log(this.apiGeneric);
return this.http.get(this.apiGeneric, { headers: headers, params:params });
}

证据:XFF header 和接受 header 是我们将它们设置为:

Accept:text/html
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9
Connection:keep-alive
Host:accounts.spotify.com
Origin:http://evil.com/
Referer:http://192.168.1.29:4200/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36
XFF:testing123

关于Angular HttpClient 行为原始 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48695360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com