如何使用Angular http发布XML?

时间:2017-06-09 21:39:29

标签: javascript xml angular http post

我在使用JavaScript发送xml时遇到问题。我试图效仿其他人做过的事,但我没有成功。我的XML Syntax Error: Please check the XML request to see if it can be parsed.代码为80040B19

这是我的代码。我正在尝试使用USPS地址验证API。在doc的第4页上,有更多信息。

const apiUrl = 'http://production.shippingapis.com/ShippingAPI.dll?API=Verify';

validate(address: Object): any {
    const payload = this.xmlBuilder.buildObject({
      AddressValidateRequest: {
        $: { USERID: 'XXXXXXXXX' }, // api key hidden
        Address: {
          $: { ID: '0'},
          FirmName: null,
          Address1: address['address2'], 
          Address2: address['address1'], // NOT A TYPO, they swap it
          City: address['city'],
          State: 'NY',
          Zip5: address['postal_code'],
          Zip4: null
        }
      }
    });
    console.log(payload); // SEE BELOW
    const headers = new Headers({ 'Content-Type': 'text/xml' });
    const options = new RequestOptions({ headers: headers });
    return this.http.post(this.apiUrl, { 'XML': payload }, options)
      .map((res) => {
        this.parseXMLStringToObject(res.text(), (err, result) => {
          console.log(result);
        });
      });
  }

这是我的有效负载上的console.log读取的内容。我已经验证了这个字母,从xml标签的顺序到必需的标签,但是可选的值。我很肯定有效载荷是正确的。

<AddressValidateRequest USERID="XXXXXXXXX">
  <Address ID="0">
    <FirmName/>
    <Address1/>
    <Address2>620 Eighth Avenue</Address2>
    <City>New York</City>
    <State>NY</State>
    <Zip5>10018</Zip5>
    <Zip4/>
  </Address>
</AddressValidateRequest>

我能想到的一件事是我不知道怎么没有正确使用http,而且我不知何故发送了一个空白的xml。

在他们的文档中,他们列出了: https://servername/ShippingAPI.dll?API=Verify&XML= ........

我注意到我没有在网址中执行XML,但我假设当我输入Content-Type:text / xml时,它会被转换。我也尝试过application / xml,它会产生同样的错误。

1 个答案:

答案 0 :(得分:1)

从USPS网站上的文档看来,调用似乎不是带有XML作为有效负载的POST,而是带有XML的GET(我想urlencoded)在URL XML参数中。