我正在使用WeatherHawk 916无线气象站在我的大学进行一项研究项目,并使用连接到它的IP模块,以便使校园内的天气数据可用。网络。流星的HTTP'GET'请求没有得到XML文件
要访问这些数据,你必须输入一个网络浏览器的IP地址和如下的数据显示:Weather Station Website。 IP模块的服务器还提供XML格式的数据(这正是我感兴趣的内容,所以我可以使用Meteor的HTTP'GET'来解析它)。如果您点击“获取公共表格XML”,此页面将出现:XML Data。
如果我在主页上只做了'10.118.160.100'流星'GET'HTTP请求,我就返回了整个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)
我正在讨论的问题,我的指导老师,他有Java中使用HTTP请求的相同问题。他使用Firefox的“Web Developer”工具,看到了网络传入和传出的文件。主网站返回了一个200的状态代码,这很好,但是具有XML的那个显然没有头文件(所以没有状态代码)。我们说可能是这个问题。相反,他尝试使用Socket,然后使用Socket的InputStream在PrintWriter上使用'GET'请求,并且它的工作非常完美。他回到了XML。现在,我不知道Meteor(服务器端)/ JavaScript中是否有Socket编程。
这里是我对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文件的链接进行打印,则数据未定义)。
所以我想的问题是,如果有任何办法,我们能做的Socket编程来处理这个或任何人知道任何其他流星包,我可以添加,也许帮我解决这个问题。提前致谢。
更新1
这里的要求,从Chrome的网络功能得到了卷曲的信息:
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
另外,我在try和catch包围的代码,我得到了以下错误:
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)
感谢您的快速响应。我用我得到的回复更新了这篇文章。我希望它有帮助。此外,我做了“复制响应头”,我得到了这个:'HTTP/0.9 200 OK',你提到了HTTP/1.1。我不知道这是否重要,但无论如何。 –
当我在try和catch块中包围HTTP请求时,原始文章中报告的新错误。 –
@melkis_espinal对不起,我最近一直埋在工作中,并没有能够重新访问。我不使用流星,但[手册暗示](https://themeteorchef.com/snippets/using-the-http-package/#tmc-get-requests)你说错了......请注意,它在请求完成时使用回调机制(匿名'function(error,response)'及其主体都是HTTP方法调用的一部分,之后不会立即执行)。如果呼叫阻塞但看起来它是异步的,则您的方法可行。 – Basic