我正在我的大学做一个研究项目,使用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,则会得到以下错误:
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调用的代码(并失败),该代码目前是同步的:
'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信息:
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此外,我尝试并捕获了代码,并得到了以下错误:
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)发布于 2016-06-20 23:09:17
答案变了。有关以前(不正确)的尝试,请参阅历史记录。
试着改变你的代码来做这个..。
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);
}
}
});https://stackoverflow.com/questions/37933117
复制相似问题