【问题标题】:Node js Request - Empty body in response节点js请求-响应为空
【发布时间】:2016-09-21 09:44:29
【问题描述】:

我正在使用节点 js 请求从以下 URL 检索 HTML,但正文返回为空。

var request = require("request");

var url = 'http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20';

request({
    uri: url
    }, function (error, response, body) {

        console.log(body);

        if (response.statusCode != '200') {
            console.log('fail');
            console.log(response.statusCode + ' # ' + error);
        } else {
            console.log(response.statusCode);
            console.log('############');
            console.log(response);
        }
    });

仔细检查后,我可以在回复中看到这一点:

_header: 'GET /webapp/wcs/stores/servlet/CatalogNavigationSearchResultCmd?langId=-1&storeId=12556&catalogId=33057&beginIndex=1&viewAllFlag=false&pageSize=20&searchTermScope=3&searchTermOperator=LIKE&searchType=ALL&sort_field=Relevance&searchTerm=TS19M11KRED&x=25&y=11&geoip=search HTTP/1.1\r\nreferer: http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20&geoip=prod\r\nhost: www.topshop.com\r\nConnection: close\r\n\r\n',
_headers:
  { referer: 'http://www.topshop.com/en/tsuk/product/bags-accessories-1702216/scarves-465/feather-wings-5884878?bi=0&ps=20&geoip=prod',
    host: 'www.topshop.com' },

我认为这意味着存在重定向?即使它返回 200 OK 而不是 302 重定向。

我不确定从重定向中检索正文的最佳方式?我是否需要向标头中的 URL 发出另一个请求?但是在这种情况下,响应代码不应该是 302 而不是 200 吗?

任何帮助表示赞赏。

【问题讨论】:

    标签: node.js request


    【解决方案1】:

    您显示的内容似乎是在重定向后发生的 - 请注意 referer 已设置为您的原始 URL。

    也许您应该设置更多标头,例如 User-Agent,因为有些服务器没有它就不会响应。

    例如,看我为this answer写的代码:

    'use strict';
    var request = require('request');
    var url = 'https://api.github.com/users/rsp';
    request.get({
        url: url,
        json: true,
        headers: {'User-Agent': 'request'}
      }, (err, res, data) => {
        if (err) {
          console.log('Error:', err);
        } else if (res.statusCode !== 200) {
          console.log('Status:', res.statusCode);
        } else {
          // data is already parsed as JSON:
          console.log(data.html_url);
        }
    });
    

    返回:

    请注意,如果没有 User-Agent 标头,它将无法工作:

    'use strict';
    var request = require('request');
    var url = 'https://api.github.com/users/rsp';
    request.get({
        url: url,
        json: true,
      }, (err, res, data) => {
        if (err) {
          console.log('Error:', err);
        } else if (res.statusCode !== 200) {
          console.log('Status:', res.statusCode);
        } else {
          // data is already parsed as JSON:
          console.log(data.html_url);
        }
    });
    

    返回:

    • 状态:403

    相同的 URL,相同的代码 - 唯一的区别是 User-Agent 标头。

    【讨论】:

    • 通过用户代理修复了它!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-01-19
    • 2017-08-19
    • 2017-09-24
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多