【问题标题】:Angular POST different response to CURL POSTAngular POST 对 CURL POST 的不同响应
【发布时间】:2017-11-10 09:09:41
【问题描述】:

我有一个端点,它希望通过发布请求接收大量数据(10mb +),并以一些 JSON 响应。端点在 ASP.NET 上运行,我无法控制它。

我可以从我的机器上通过 curl 发送一个示例文件,它会得到一个有效的 JSON 响应,例如:

$ cat data.txt | curl -X POST -d "@-" "http://{omitted}/?numtopics=2&topiclength=2&passes=2"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 7611k  100   834  100 7610k     75   691k  0:00:11  0:00:11 --:--:--   252
{"JSON REPONSE..."}

但是,当我尝试从 Angular 调用它时,我得到了完全不同的结果

fileChange(event) {
    var fileReader = new FileReader();
    fileReader.readAsBinaryString(event.target.files[0]);
    fileReader.onload = data => {
      this.http.post('http://{omitted}/?numtopics=2&topiclength=2&passes=2', fileReader.result)
        .map(res => res.json())
        .catch(x => {
          return Observable.throw(x)
        })
        .subscribe(
          data => console.log(data),
          error => console.error(error));
    }
  }

在这里我得到以下 HTML 响应,而不是预期的 JSON 响应:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form method="post" action="./?numtopics=2&amp;topiclength=2&amp;passes=2" id="InputData">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="Qrcz5rvSPx2C1sHcD5F4bac+Uitth2vxAxSPfWdXSaigf52n46StPyoNiNNnVKj9QKodTIPyRCkpLmTDJqDS7XR/DPeNDv96B29H5w6Uxqf6VeCm5FJHNqL98+YGppIz" />
</div>

<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
</div>
    <div>

    </div>
    </form>
</body>
</html>

我在 Angular 代码中做错了什么?

【问题讨论】:

    标签: angular typescript post


    【解决方案1】:

    发现我错过了什么。通过在 curl 中使用详细模式,我可以看到它自动添加了 content-type 标头。通过将此添加到角度 POST 请求中,它起作用了。

    添加标题的代码如下:

    var fileReader = new FileReader();
        var headers = new Headers();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        fileReader.readAsBinaryString(event.target.files[0]);
        fileReader.onload = data => {
          this.http.post('http://{url}/?numtopics=2&topiclength=2&passes=2', fileReader.result, {headers: headers})
    

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多