首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor的HTTP ' get‘请求不会得到XML文件

Meteor的HTTP ' get‘请求不会得到XML文件
EN

Stack Overflow用户
提问于 2016-06-20 22:58:56
回答 1查看 414关注 0票数 1

我正在我的大学做一个研究项目,使用WeatherHawk 916无线气象站,并使用连接到它的IP模块,这样就可以在校园网络上获取天气数据。

要访问数据,必须在web浏览器中键入IP地址,数据显示如下:气象站网站。IP模块的服务器还以XML的形式提供数据(这是我感兴趣的,这样我就可以使用Meteor的HTTP ' get‘并解析它)。如果单击“获取公共表XML",此页面将显示:XML数据

如果我在主页上执行Meteor ' get‘HTTP请求,即'10.181.160.100',我就可以得到整个HTML页面,没有问题,这很好。但是,如果我试图从'10.181.160.100/ get _public_tbl.cgi?A=1‘获取XML,则会得到以下错误:

代码语言:javascript
复制
I20160620-17:41:11.662(-4)? Exception while invoking method 'xmlDemo' Error:    Parse Error
I20160620-17:41:11.833(-4)?     at Object.Future.wait   (/Users/melkisespinal/.meteor/packages/meteor-   tool/.1.3.3_1.ajs0iq++os.osx.x86_64+web.browser+web.cordova/mt-  os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:449:15)
I20160620-17:41:11.834(-4)?     at Object.call  (packages/meteor/helpers.js:119:1)
I20160620-17:41:11.834(-4)?     at [object Object].xmlDemo (imports/api/main.js:6:21)
I20160620-17:41:11.834(-4)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1704:12)
I20160620-17:41:11.834(-4)?     at packages/ddp-server/livedata_server.js:711:19
I20160620-17:41:11.835(-4)?     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20160620-17:41:11.835(-4)?     at packages/ddp-server/livedata_server.js:709:40
I20160620-17:41:11.835(-4)?     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20160620-17:41:11.835(-4)?     at packages/ddp-server/livedata_server.js:707:46
I20160620-17:41:11.836(-4)?     at tryCallTwo (/Users/melkisespinal/.meteor/packages/promise/.0.7.2.71gs7j++os+web.browser+web.cordova/npm/node_modules/promise/lib/core.js:45:5)
I20160620-17:41:11.836(-4)?     - - - - -
I20160620-17:41:11.836(-4)?     at Socket.socketOnData (http.js:1639:20)
I20160620-17:41:11.837(-4)?     at TCP.onread (net.js:528:27)

我和我的教员顾问讨论了这个问题,他在使用HTTP请求的Java中也遇到了同样的问题。他使用了Firefox的“”工具,并看到了文件。主网站返回的状态代码为200,这很好,但是带有XML的网站显然没有头文件(所以没有状态代码)。我们说过也许这就是问题所在。因此,他尝试使用套接字,然后在PrintWriter上使用套接字的InputStream使用一个'GET‘请求,它工作得很好。他拿回了XML。现在,我不知道Meteor (服务器端)/ JavaScript中是否有套接字编程。

下面是HTTP调用的代码(并失败),该代码目前是同步的:

代码语言:javascript
复制
'xmlDemo':function(){
    var result = HTTP.call('GET', 'http://10.181.160.100/get_public_tbl.cgi?A=1',
        {});
    if(result.statusCode == 200){
        return result.content;
    }
    else{
        console.log("Response issue: ", result.statusCode);
        throw new Meteor.Error(result.statusCode, result.error);
    }
}

如果我只执行10.181.160.100/而不是当前链接,它将返回数据并打印到控制台(如果试图使用XML文件的链接打印数据,则数据是未定义的)。

所以我想问题是,如果有任何方法,我们可以做套接字编程来处理这个问题,或任何人知道任何其他流星包,我可以添加,也许可以帮助我处理这个问题。提前谢谢。

更新1

以下是根据请求从Chrome功能获得的cURL信息:

代码语言:javascript
复制
curl http://10.181.160.100/get_public_tbl.cgi?A=1'
-H 'Accept-Encoding: gzip, deflate, sdch' 
-H 'Accept-Language: en-US,en;q=0.8,es;q=0.6' 
-H 'Upgrade-Insecure-Requests: 1' 
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36' 
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' 
-H 'Cache-Control: max-age=0' 
-H 'Connection: keep-alive' 
--compressed

此外,我尝试并捕获了代码,并得到了以下错误:

代码语言:javascript
复制
TypeError: Cannot read property 'statusCode' of undefined
I20160622-20:57:38.918(-4)?     at [object Object].xmlDemo  (imports/api/main.js:27:6)
I20160622-20:57:38.918(-4)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1704:12)
I20160622-20:57:38.918(-4)?     at packages/ddp-server/livedata_server.js:711:19
I20160622-20:57:38.919(-4)?     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20160622-20:57:38.919(-4)?     at packages/ddp-server/livedata_server.js:709:40
I20160622-20:57:38.919(-4)?     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20160622-20:57:38.919(-4)?     at packages/ddp-server/livedata_server.js:707:46
I20160622-20:57:38.920(-4)?     at tryCallTwo (/Users/melkisespinal/.meteor/packages/promise/.0.7.2.71gs7j++os+web.browser+web.cordova/npm/node_modules/promise/lib/core.js:45:5)
I20160622-20:57:38.920(-4)?     at doResolve (/Users/melkisespinal/.meteor/packages/promise/.0.7.2.71gs7j++os+web.browser+web.cordova/npm/node_modules/promise/lib/core.js:200:13)
I20160622-20:57:38.920(-4)?     at new Promise (/Users/melkisespinal/.meteor/packages/promise/.0.7.2.71gs7j++os+web.browser+web.cordova/npm/node_modules/promise/lib/core.js:66:3)
EN

回答 1

Stack Overflow用户

发布于 2016-06-20 23:09:17

答案变了。有关以前(不正确)的尝试,请参阅历史记录。

试着改变你的代码来做这个..。

代码语言:javascript
复制
var result = HTTP.call(
        'GET',
        'http://10.181.160.100/get_public_tbl.cgi',
        {'query': '?A=1'},
        function(error, result) {
    if(error) {
        // Failed hideously
    } else {
        // Got a response
        if(result.statusCode == 200){
            // Was OK
            return result.content;
        } else {
            // Was something other than a 200 OK
            console.log("Response issue: ", result.statusCode);
            throw new Meteor.Error(result.statusCode, result.error);
        }   
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37933117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档