【问题标题】:NodeJs request.get() function not working while the url is accessible from the browser可从浏览器访问 url 时,NodeJs request.get() 函数不起作用
【发布时间】:2017-09-25 09:42:30
【问题描述】:

我正在使用request npm 模块。我想从 url 检索图像。 request.get(url) 函数返回“400 Bad Request”,而该图像可从浏览器访问。

我点击的网址是:http://indiatribune.com/wp-content/uploads/2017/09/health.jpg

【问题讨论】:

  • 请向我们提供您的代码示例。

标签: node.js file httprequest


【解决方案1】:

您可以尝试添加一些标题:

const request = require('request');
request.get({
    url: 'http://indiatribune.com/wp-content/uploads/2017/09/health.jpg',
    headers: {

        Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'en-GB,en;q=0.8,en-US;q=0.6,hu;q=0.4',
        'Cache-Control': 'max-age=0',
        Connection: 'keep-alive',
        Host: 'indiatribune.com',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',

    },
}, (err, response, data) => {
    console.log(response, data);
});

User-Agent 似乎就足够了。

【讨论】:

  • 是的,它正在工作。谢谢你。但我现在更不满意了。为什么其他图片 url 不需要这些 headers出现这种特殊情况?
  • 这取决于提供此图像的服务器。在这种情况下,服务器会检查标头,并相应地发送响应。可能服务器确实只想将图像提供给浏览器,而不是机器人。大多数网络服务器不做这个检查。
  • 好的,我将在我的框架中添加一些像这样的通用标题,这样我会遇到这样的问题。由于它取决于服务器代码和检查,因此我认为没有针对此类问题的永久解决方案。再次感谢您。
【解决方案2】:

使用 download module 。这很简单。

const fs = require('fs');
const download = require('download');

download('http://indiatribune.com/wp-content/uploads/2017/09/health.jpg').pipe(fs.createWriteStream('foo.jpg'));

【讨论】:

  • 我有一个为此 http 和 https 交互编写的框架,无论数据如何,它都是通用的。我不认为下载模块适合它。
  • 感谢您提供有关下载模块的信息。以后对我有用。
猜你喜欢
  • 2019-02-25
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多