2017-05-27 124 views
0

我有以下问题:我试图从另一个网站读取远程CSV,并且每当使用http.get时,我都会收到一个状态码410 Gone。 Chrome可以很好地下载,另外一个网站也会加载这些CSV。使用Node JS读取远程CSV

var options = { 
    host: myHost, 
    port: 80, 
    path: myURL, 
    method: 'GET', 
    headers: { 
     'Content-disposition': 'attachment; filename='someFile.csv', 
     'Content-Type': 'text/csv' 
    } 
}; 

http.get(options, function(res) { 
    var str = ''; 
    res.on('data', function(chunk) { 
     str += chunk; 
    }); 
    res.on('end', function() { 
     console.log(str); 
    }); 
}); 

我试过使用require,但我得到了同样的结果。什么是适当的方式去做这件事?

回答

0

我不知道这是否是你问题的主要原因,但是你发送的头文件不适合GET请求。

Content-disposition是一个响应标题。它在回应中只有真正的意义。下面是这头从MDN说明:

在常规的HTTP响应,内容处置响应报头是头表示如果内容预计将在浏览器中内嵌显示,也就是为Web页面或作为网页的一部分,或作为附件下载并保存在本地。

Content-type在请求中使用时,描述了随请求发送的数据的内容格式。这适用于POST或PUT,但不适用于GET,因为使用GET时,除了请求标头本身和路径以外,您不会发送任何数据。

如果某个请求想要向服务器发送一个GET请求的首选内容类型,它通常要么使用Accept头来列出其首选数据类型,要么使用该服务器已知的查询参数支持沟通所需的数据类型。您可以在this post中看到关于Content-typeAccept标题的讨论。

如果删除这些并没有什么区别,那么GET请求和浏览器发送的内容必须有一些其他区别。您可以通过检查这两个请求来确定有什么不同。如果您控制服务器,那么您可以使用其中一种数据包嗅探器,它将向您显示在这两种情况下传入HTTP请求的确切内容,并且您可以直接比较它们。如果你不控制服务器,那么你可以在客户端使用这样的数据包嗅探器,并查看两个传出的请求。在浏览器中,您可以在浏览器调试器的网络选项卡中看到请求。

4xx错误意味着资源规范有问题,服务器不认为它能找到匹配的资源。这可能是由以上两个头中的一个意外出现的,或者更可能是请求中的路径规范问题。其他

一件事是检查浏览器中是否也发送一个cookie给这台服务器可能包含相关的请求(如用户名或类似的东西)的一些其他信息。如果我们能够确切地看到线路上的两个请求中的内容并查看它们的不同之处,我们可以更详细地提供帮助。


虽然这可能不是什么你的情况发生,这也将是最好有一个HTTP错误处理程序:

http.get(options, function(res) { 
    var str = ''; 
    res.on('data', function(chunk) { 
     str += chunk; 
    }); 
    res.on('end', function() { 
     console.log(str); 
    }); 
}).on('error', function(e) { 
    // error sending the request here 
    console.log(e); 
}); 
+0

我已删除的选项报头,并添加错误处理。但我的问题依然存在。不幸的是,我不控制其他服务器。当我从chrome访问链接时,例如http://ctpcj.ro/orare/csv/orar_4_lv。csv我在开发者控制台中得到这个:Resource解释为Document,但是用MIME类型text/csv:“http://ctpcj.ro/orare/csv/orar_4_lv.csv”传输。该页面仍然加载,但该文件也被下载。 –

+0

@StirZoltán - 当我尝试在Chrome中访问该链接时,它不适合我。我收到一条关于410错误的消息。 – jfriend00

+0

嗯。这似乎是有一个cookie或什么的,因为如果我打开它在不同的浏览器它不起作用。我忘了提及,这个文件可能在某种内容管理系统的后面(它看起来像是joomla) –