node.js
  • request
  • 2016-09-21 11 views 1 likes 
    1

    ノードjsリクエストを使用して、次のURLからHTMLを取得していますが、ボディが空に戻ります。精密検査でノードjsリクエスト - 応答の空のボディ

    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' }, 
    

    は、リダイレクトがあったことを意味しますか?たとえ302リダイレクトの代わりに200 OKを返したとしても。

    リダイレクトから本文を取得する最善の方法がわからないのですか?ヘッダーのURLに別のリクエストを行う必要がありますか?しかし、このコードではレスポンスコードが200ではなく302であるべきですか?

    助けてください。

    答えて

    2

    リダイレクト後に表示される内容は、refererが元のURLに設定されていることを確認してください。

    User-Agentなどのヘッダーを設定する必要があります。これは、一部のサーバーで応答がないためです。

    '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ヘッダーなしに動作しないことを

    注たとえば

    は、私がthis answerのために書いたコードを参照してください:

    '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ヘッダです。

    +0

    ユーザーエージェントに渡すと修正されました。どうもありがとう。 –

    関連する問題