2016-06-20 34 views
1

我正在使用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) 

回答

0

答案改变。查看以前(不正确)尝试的历史记录。

试着改变你的代码来做到这一点...

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

感谢您的快速响应。我用我得到的回复更新了这篇文章。我希望它有帮助。此外,我做了“复制响应头”,我得到了这个:'HTTP/0.9 200 OK',你提到了HTTP/1.1。我不知道这是否重要,但无论如何。 –

+0

当我在try和catch块中包围HTTP请求时,原始文章中报告的新错误。 –

+0

@melkis_espinal对不起,我最近一直埋在工作中,并没有能够重新访问。我不使用流星,但[手册暗示](https://themeteorchef.com/snippets/using-the-http-package/#tmc-get-requests)你说错了......请注意,它在请求完成时使用回调机制(匿名'function(error,response)'及其主体都是HTTP方法调用的一部分,之后不会立即执行)。如果呼叫阻塞但看起来它是异步的,则您的方法可行。 – Basic