0

我正在尝试通过 http 与 HUAWEI E3272 usb 调制解调器交换数据。使用 linux,我使用 curl 取得了一些成功:

curl -X GET "http://192.168.1.1/api/device/information" -H "__RequestVerificationToken: $(curl -s -X GET http://192.168.1.1/api/webserver/token | grep token  | cut -d '>' -f2 | cut -d '<' -f1)" -H "Content-Type: text/xml"

得到正确的回应:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<DeviceName>E3272</DeviceName>
<SerialNumber>S7CBY14A17006941</SerialNumber>
<Imei>862600021252600</Imei>
<Imsi>724051120127678</Imsi>
<Iccid>89550536110015952771</Iccid>
<Msisdn></Msisdn>
<HardwareVersion>CH1E3272SM</HardwareVersion>
<SoftwareVersion>22.470.09.00.150</SoftwareVersion>
<WebUIVersion>13.100.11.00.150</WebUIVersion>
<MacAddress1>00:0D:87:8E:4B:AC</MacAddress1>
<MacAddress2></MacAddress2>
<ProductFamily>LTE</ProductFamily>
<Classify>hilink</Classify>
</response>

但我需要用jquery来做。我也尝试了 100 次,但我错过了一些我不知道它是什么的东西。在调用该方法之前,我需要通过某个标头传递一个令牌。我知道“g_requestVerificationToken”正在正确获取值,因为我对其进行了调试。

这是我的脚本:

var g_requestVerificationToken = '';
var headers = {};
  $.ajax({
  type: 'GET',
  url: "http://192.168.1.1/api/webserver/token",
  crossDomain: true,
  dataType: 'xml',
  success: function(data) {
  g_requestVerificationToken = (data).find("response").find("token").text();
  headers['__RequestVerificationToken'] = g_requestVerificationToken;
    $.ajax({
    type: 'GET',
    async: false,
    headers: headers,
    url: "http://192.168.1.1/api/device/information",
    crossDomain: true,
    ContentType: 'text/xml',
    success: function(data) {
    console.log(data);
    }});
  }});

返回此错误(因为我无法通过 Header 传递令牌会话):

<?xml version="1.0" encoding="UTF-8"?>
<error>
<code>125001</code>
<message></message>
</error>

有了它,我得到了这些浏览错误:

错误日志

我正在使用Chrome Webstore 中的allow control allow origin插件来防止出现一些 CORS 错误。

问题是:在 linux 中通过 curl 我能够正确地与调制解调器通信,但不能使用 jQuery。

任何人都可以提供一些帮助吗?

谢谢!!

4

1 回答 1

0

据我所知,您的 CORS 设置使 jQuery 通过HTTP OPTIONS调用(而不是直接HTTP GET)进行飞行前查询。您的服务器告诉它它没有实现该OPTIONS方法,因此返回HTTP 501并且 jQuery 在那一点上认输。

我会研究您是否可以完全避免 CORS 麻烦 - 或者实施HTTP OPTIONS以在您的服务器端返回适当的 CORS 标头。

于 2017-09-05T11:41:14.853 回答