简体   繁体   中英

How do you get node using npm request module to work that currently works in Postman?

First there have been many questions similar to this one but none of them have solved my problem.

Windows 10 x64 Node 12.6.0 request 2.88.0 Postman 7.2.2

Postman has a feature to generate code for npm request.

Postman works fine and returns data. In code the post works and the body returns the api info but with no data.

Here is the code I am using

var request = require("request");

var options = { method: 'POST',
    url: 'https://www.netflix.com/api/shakti/v73fa49e3/pathEvaluator',
    qs:
        { drmSystem: 'widevine',
            isWatchlistEnabled: 'false',
            isVolatileBillboardsEnabled: 'true',
            falcor_server: '0.1.0',
            withSize: 'true',
            materialize: 'true' },
    headers:
        { 'cache-control': 'no-cache',
            'Content-Length': '754',
            Host: 'www.netflix.com',
            'Cache-Control': 'no-cache',
            'X-Netflix.browserName': 'Chrome',
            'X-Netflix.osVersion': '10.0',
            'X-Netflix.playerThroughput': '58194',
            Referer: 'https://www.netflix.com/browse/my-list',
            Accept: '*/*',
            'Content-Type': 'application/x-www-form-urlencoded',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
            'X-Netflix.esnPrefix': 'NFCDCH-02-',
            'X-Netflix.uiVersion': 'v73fa49e3',
            'X-Netflix.browserVersion': '75',
            Connection: 'keep-alive',
            'X-Netflix.clientType': 'akira',
            'Accept-Language': 'en-US,en;q=0.9,es;q=0.8',
            'Accept-Encoding': 'gzip, deflate, br',
            DNT: '1',
            'X-Netflix.osFullName': 'Windows 10',
            Origin: 'https://www.netflix.com' },
    form:
        { path:
                [ '["mylist",["id","length","name","requestId","trackIds"]]',
                    '["mylist",{"from":0,"to":400},["availability","availabilityEndDateNear","delivery","interactiveBookmark","maturity","numSeasonsLabel","queue","releaseYear","runtime","seasonCount","summary","title","userRating","userRatingRequestId"]]',
                    '["mylist",{"from":0,"to":400},"current",["hasAudioDescription","summary"]]',
                    '["mylist",{"from":0,"to":400},"boxarts","_233x131","webp"]' ],

request(options, function (error, response, body) {
    if (error) throw new Error(error);

    console.log(body);
});

This might help you.

const request = require("request");

// URL 
const reqUrl = 'https://www.netflix.com/api/shakti/v73fa49e3/pathEvaluator';

// HEADERS 
const reqHeaders = {
  'cache-control': 'no-cache',
  'Content-Length': '754',
  Host: 'www.netflix.com',
  'Postman-Token': '845e51a3-67cf-4d93-8518-997a7e22f4b7,edf531a3-056c-493e-86b4-3003504214ff',
  'Cache-Control': 'no-cache',
  'X-Netflix.browserName': 'Chrome',
  'X-Netflix.osVersion': '10.0',
  'X-Netflix.playerThroughput': '58194',
  Referer: 'https://www.netflix.com/browse/my-list',
  Accept: '*/*',
  'Content-Type': 'application/x-www-form-urlencoded',
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
  'X-Netflix.esnPrefix': 'NFCDCH-02-',
  'X-Netflix.uiVersion': 'v73fa49e3',
  'X-Netflix.browserVersion': '75',
  Connection: 'keep-alive',
  Cookie: 'memclid=0abfdde3-fdf8-4e6e-acc5-dae57e09941d; clSharedContext=7461c7cc-5a56-4e5f-b733-6febb8acd74e; lhpuuidh-browse-JGKS7R3LLZAC5M5AEZ5UK2FYIQ=US%3AEN-US%3A5f656cb6-ec81-4ffe-84b1-63a759e1f49b_ROOT; lhpuuidh-browse-JGKS7R3LLZAC5M5AEZ5UK2FYIQ-T=1562281011685; lhpuuidh-browse-vvvvvrrerr=US%3AEN-US%3Abdfaa1e1-6464-4f31-bd4e-1c3e1c1d8a39_ROOT; lhpuuidh-browse-SN75QUHUXBHIAR23$TOJ3MZFVNQ7VYM-T=1562281110358; flwssn=8acee0b3-44c5-47ca-83ca-d6df6812aae6; profilesNewSession=0; NetflixId=v%3D2%26c$t3DBQAOAAEBEG4pPrNrBZszdxk8h2J8z1-BwG9mHUGvDRv7ORSv67vAlP-SdTbWM7Nx0lORLEed8a5yNR37Ws-WNM9SGe27SaTdJVqavU0oXha4WaZ0BWfDqu_6jQVvSXK0448K3QbpZ_QdubFfWu0h0SFXFxvXYR5cS-ks0bg7SF4V8iLC15QA-Lr7f354xZWDdAWV1xEYPVT06ptRRqi7g1cLE778U9WP9LCJYARWmuFPlxGVe4cmwxhQRGShu5IN6ucYcSe4OEJL-Ew1Yxd5mk4_0fhzkf05QAnirTzm5BpP7h07p06D3ZOdOzGsBlI-fV51g9eXvlA1kTL7irOJ6nq6NaXz1L397kEjcEvpgcCS5pslq3a9qEQ60KOathphl5GLZGxn4xvXIcx5Hm8cfs4iVng1kn9elzavpq9AbE8ce9pbbS82IF16MlOcVwICJXB9z_TNZ9ejkmMtACl8mKmJoXBZIRYZJXCbE0wcj-R4WQKZDqQJvWsPb_3a0PQBGoZojZ8pbdM3LUf21uxPBbFa8xmikLTMUM6FMbrMhpNqJ9tiQ5X2eAqtaeRHb3f7Dooz-E04hw9Or5_UaeX9264Rc6xtHpjDDfgg57LCza3BohNv3ag14Es.%26bt%3Ddbl%26ch%3DAQEAEAABABTq8jfw7-uqTNfPp2rJYz9aGgfupIDvmNU.%26mac%3DAQEAEAABABTp8m22vbAq4UFdbkSZ8fwNXxu5lA2rUaQ.; SecureNetflixId=v%3D2%26mac%3DAQEAEQABABRFqE_Sb9qJah1InM9FBWZTOIDUlQqiX8s.%26dt%3D1562307985579; nfvdid=BQFmAAEBEBhpAs5prG2e%2FuSxGlzoowlgHvZPo5LP%2F2%2BADgwBZrcGgdZwsfNb0vdVGKri8rGJwZ8gD9CRQs66NlMtqB3G%2FZYyTtnkl9qZoWp9AUfIhhmJPVbVTcsWX9j3ohgTuunD58WRtFBLFwu4HRlh2f70lszp; playerPerfMetrics=%7B%22uiValue%22%3A%7B%22throughput%22%3A59173%7D%2C%22mostRecentValue%22%3A%7B%22throughput%22%3A59173%7D%7D; cL=1562307988270%7C156230796458086017%7C156230796487562712%7C%7C8%7CTR7OX5P3Z5DY3DVRBZH7CZQVDI,memclid=0abfdde3-fdf8-4e6e-acc5-dae57e09941d; clSharedContext=7461c7cc-5a56-4e5f-b733-6febb8acd74e; lhpuuidh-browse-JGKS7R3LLZAC5M5AEZ5UK2FYIQ=US%3AEN-US%3A5f656cb6-ec81-4ffe-84b1-63a759e1f49b_ROOT; lhpuuidh-browse-JGKS7R3LLZAC5M5AEZ5UK2FYIQ-T=1562281011685; lhpuuidh-browse-SN75QUHUXBHITOJ3MZFVNQ7VYM=US%3AEN-US%3Abdfaa1e1-6464-4f31-bd4e-1c3e1c1d8a39_ROOT; lhpuuidh-browse-SN75QUHUXBHITOJ3MZFVNQ7VYM-T=1562281110358; flwssn=8acee0b3-44c5-47ca-83ca-d6df6812aae6; profilesNewSession=0; NetflixId=v%3D2%26ct%3DBQAOAAEBEG4pPrNrBZszdxk8h2J8z1-BwG9mHUGvDRv7ORSv67vAlP-SdTbWM7Nx0lORLEed8a5yNR37Ws-WNM9SGe27SaTdJVqavU0oXha4WaZ0BWfDqu_6jQVvSXK0448K3QbpZ_QdubFfWu0h0SFXFxvXYR5cS-ks0bg7SF4V8iLC15QA-Lr7f354xZWDdAWV1xEYPVT06ptRRqi7g1cLE778U9WP9LCJYARWmuFPlxGVe4cmwxhQRGShu5IN6ucYcSe4OEJL-Ew1Yxd5mk4_0fhzkf05QAnirTzm5BpP7h07p06D3ZOdOzGsBlI-fV51g9eXvlA1kTL7irOJ6nq6NaXz1L397kEjcEvpgcCS5pslq3a9qEQ60KOathphl5GLZGxn4xvXIcx5Hm8cfs4iVng1kn9elzavpq9AbE8ce9pbbS82IF16MlOcVwICJXB9z_TNZ9ejkmMtACl8mKmJoXBZIRYZJXCbE0wcj-R4WQKZDqQJvWsPb_3a0PQBGoZojZ8pbdM3LUf21uxPBbFa8xmikLTMUM6FMbrMhpNqJ9tiQ5X2eAqtaeRHb3f7Dooz-E04hw9Or5_UaeX9264Rc6xtHpjDDfgg57LCza3BohNv3ag14Es.%26bt%3Ddbl%26ch%3DAQEAEAABABTq8jfw7-uqTNfPp2rJYz9aGgfupIDvmNU.%26mac%3DAQEAEAABABTp8m22vbAq4UFdbkSZ8fwNXxu5lA2rUaQ.; SecureNetflixId=v%3D2%26mac%3DAQEAEQABABRFqE_Sb9qJah1InM9FBWZTOIDUlQqiX8s.%26dt%3D1562307985579; nfvdid=BQFmAAEBEBhpAs5prG2e%2FuSxGlzoowlgHvZPo5LP%2F2%2BADgwBZrcGgdZwsfNb0vdVGKri8rGJwZ8gD9CRQs66NlMtqB3G%2FZYyTtnkl9qZoWp9AUfIhhmJPVbVTcsWX9j3ohgTuunD58WRtFBLFwu4HRlh2f70lszp; playerPerfMetrics=%7B%22uiValue%22%3A%7B%22throughput%22%3A59173%7D%2C%22mostRecentValue%22%3A%7B%22throughput%22%3A59173%7D%7D; cL=1562307988270%7C156230796458086017%7C156230796487562712%7C%7C8%7CTR7OX5P3Z5DY3DVRBZH7CZQVDI; memclid=0abfdde3-fdf8-4e6e-acc5-dae57e09941d; SecureNetflixId=v%3D2%26mac%3DAQEAEQABABSBtymZf_WUUxqlLjxi9Tcz1N9HfVu27lk.%26dt%3D1562373989602; NetflixId=ct%3DBQAOAAEBENa9KbSSXAiVkZ-nyrCx-eqB4E5bZ_0MPQueZB7vgCnv5dv90cB7Lw9mzIa4SiUj09G9TjdSTfh56B6WIBR0QhsgE99T2rPoDs0iKPhegsCl20lLNc8LFYmhH1duOYA09lPXxaW7fjFea3v7KdbVhEkoCQKMJ5XM4G6vuMmMMUWGnqftt8Fa7xGmgxsrZBYxLhyqA_EC0YKIIlXeNC2kzcc7igTTU1LPIgQmvq-eOkskaCnkfX995ZzIj1yrcXa6xEIprO7E2buzF0nnDcqiiLwDwWNOF_DNCiyHxT9SbBTeaacoAHVI4iXnZ3HY4GVHJuq7gJEtGR8fwraPVyCIc5jeiFu1FXdKogro5w22TrQNNQU-eDBEBoLImmk1pZqBwbSYVrsk86JkqGtWmuxFGyyBTmTSyrfhcETUDOSPvveWCaiBA617rqOTP7n8UbfBnWDCoDS1FCweAGM1K_7JVOY3f7Bo6CVUvLODKutGsuXar9GiOmPoCJMiCO-MCnda3BS-oqROhm5nOEL5rCWRlxlIgn8vrQB5ELWADX3qwwSEi7yTZ-hHaQSI5xIkqFcgeH0LT27fpxdrz01jlZ2o1glDQhBKoO34WTmllvCDQzqcBL7_nNaE4Y9I30N00O18pBXIgHYloRDnOUUxV66_9AxBiw..%26bt%3Ddbl%26ch%3DAQEAEAABABTq8jfw7-uqTNfPp2rJYz9aGgfupIDvmNU.%26v%3D2%26mac%3DAQEAEAABABQmYnZZPVCzzqbysYph9oT_ddbBqaBhqLM.',
  'X-Netflix.osName': 'Windows',
  'x-netflix.request.client.user.guid': 'JGKS7R3LLZAC5M5AEZ5UK2FYIQ',
  'X-Netflix.clientType': 'akira',
  'Accept-Language': 'en-US,en;q=0.9,es;q=0.8',
  'Accept-Encoding': 'gzip, deflate, br',
  DNT: '1',
  'X-Netflix.osFullName': 'Windows 10',
  Origin: 'https://www.netflix.com'
};

// QUERY PARAMS
const queryParams = {
  drmSystem: 'widevine',
  isWatchlistEnabled: 'false',
  isVolatileBillboardsEnabled: 'true',
  falcor_server: '0.1.0',
  withSize: 'true',
  materialize: 'true',
};

// REQ BODY
const reqBody = {
  path:
    ['["mylist",["id","length","name","requestId","trackIds"]]',
      '["mylist",{"from":0,"to":400},["availability","availabilityEndDateNear","delivery","interactiveBookmark","maturity","numSeasonsLabel","queue","releaseYear","runtime","seasonCount","summary","title","userRating","userRatingRequestId"]]',
      '["mylist",{"from":0,"to":400},"current",["hasAudioDescription","summary"]]',
      '["mylist",{"from":0,"to":400},"boxarts","_233x131","webp"]'],
  authURL: '1562307985945.HbhvPp8+bh2fI7XfVLhH3Dj6zJc='
}

// OPTIONS
const options = {
  method: 'POST',
  url: reqUrl,
  headers: reqHeaders,
  qs: queryParams,
  body: qs.stringify(reqBody),
  json: true,
};

request(options, (error, response, resBody) => {
  if (error) {
    throw error;
  } else if (response.statusCode !== 200) {
    throw resBody;
  }
  return resBody;
});

I figured out the problem. The api was expecting the data to be in the body query string stringified.

To do this remove the form variable from the request. Then stringify the value of the form variable and send that as they body

Working code:

var request = require('request');
var qs = require('querystring')
var dataString = qs.stringify({
    path:
        ['["mylist",["id","length","name","requestId","trackIds"]]',
            '["mylist",{"from":0,"to":400},["availability","availabilityEndDateNear","delivery","interactiveBookmark","maturity","numSeasonsLabel","queue","releaseYear","runtime","seasonCount","summary","title","userRating","userRatingRequestId"]]',
            '["mylist",{"from":0,"to":400},"current",["hasAudioDescription","summary"]]',
            '["mylist",{"from":0,"to":400},"boxarts","_233x131","webp"]'],

})

var headers = {
    'Accept': '*/*',
    'Accept-Language': 'en-US,en;q=0.9,es;q=0.8',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    'DNT': '1',
    'Origin': 'https://www.netflix.com',
    'Postman-Token': '9aceb650-3446-4d39-8234-b503138fd065',
    'Referer': 'https://www.netflix.com/browse/my-list',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
    'X-Netflix.browserName': 'Chrome',
    'X-Netflix.browserVersion': '75',
    'X-Netflix.clientType': 'akira',
    'X-Netflix.esnPrefix': 'NFCDCH-02-',
    'X-Netflix.osFullName': 'Windows 10',
    'X-Netflix.osName': 'Windows',
    'X-Netflix.osVersion': '10.0',
    'X-Netflix.playerThroughput': '58194',
    'X-Netflix.uiVersion': 'v73fa49e3',
    'cache-control': 'no-cache',
    'Cookie': 'Cookie23werwetertert';

//var dataString = 'path=%5B%22mylist%22%2C%5B%22id%22%2C%22length%22%2C%22name%22%2C%22requestId%22%2C%22trackIds%22%5D%5D&path=%5B%22mylist%22%2C%7B%22from%22%3A0%2C%22to%22%3A400%7D%2C%5B%22availability%22%2C%22availabilityEndDateNear%22%2C%22delivery%22%2C%22interactiveBookmark%22%2C%22maturity%22%2C%22numSeasonsLabel%22%2C%22queue%22%2C%22releaseYear%22%2C%22runtime%22%2C%22seasonCount%22%2C%22summary%22%2C%22title%22%2C%22userRating%22%2C%22userRatingRequestId%22%5D%5D&path=%5B%22mylist%22%2C%7B%22from%22%3A0%2C%22to%22%3A400%7D%2C%22current%22%2C%5B%22hasAudioDescription%22%2C%22summary%22%5D%5D&path=%5B%22mylist%22%2C%7B%22from%22%3A0%2C%22to%22%3A400%7D%2C%22boxarts%22%2C%22_233x131%22%2C%22webp%22%5D&authURL=.%%3D';

var options = {
    json: true,
    url: 'https://www.netflix.com/api/shakti/v73fa49e3/pathEvaluator?drmSystem=widevine&isWatchlistEnabled=false&isVolatileBillboardsEnabled=true&falcor_server=0.1.0&withSize=true&materialize=true',
    method: 'POST',
    headers: headers,
    body: dataString
};

function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body);
    }
}

request(options, callback);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM