Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
难以使用http.request将jQuery-JSONP查询转换为Node.JS查询_Jquery_Ajax_Node.js_Jsonp - Fatal编程技术网

难以使用http.request将jQuery-JSONP查询转换为Node.JS查询

难以使用http.request将jQuery-JSONP查询转换为Node.JS查询,jquery,ajax,node.js,jsonp,Jquery,Ajax,Node.js,Jsonp,长期(3个月)读者,第一次海报。我有一个客户端jquery AJAX请求,请求一些JSONP数据,我正试图将其转换为http.request,这样我就可以在Node.js服务器上的服务器端使用它 jQuery工作起来非常简单:这里是JSfiddle,这里是代码: $.ajax({ type: 'GET', url: 'http://www.mysupermarket.co.uk/Api.aspx?Command={"Output":"JSONP","Commands":[{"

长期(3个月)读者,第一次海报。我有一个客户端jquery AJAX请求,请求一些JSONP数据,我正试图将其转换为http.request,这样我就可以在Node.js服务器上的服务器端使用它

jQuery工作起来非常简单:这里是JSfiddle,这里是代码:

  $.ajax({
    type: 'GET',
    url: 'http://www.mysupermarket.co.uk/Api.aspx?Command={"Output":"JSONP","Commands":[{"Name":"Basket","Params":{"BrandStores":["780"],"ProductPrices":{"920":["ASDA","Ocado","Sainsburys","Tesco","Waitrose"],"016555":["ASDA","Sainsburys","Tesco","Waitrose"]},"TrolleyItems":["920","52200","1017"],"TrolleyLinks":["780"]}}]}&banner=34',
    dataType: 'jsonp',
    success: function(json) {
        alert(JSON.stringify(json)); 
    }
});
然而,当我尝试使用如下节点的http模块重写此请求时,它失败了,返回403。我怀疑这是因为我没有在任何地方设置dataType:JSONP

var ajaxUrl = 'http://www.mysupermarket.co.uk/Api.aspx?Command={"Output":"JSONP","Commands":[{"Name":"Basket","Params":{"BrandStores":["780"],"ProductPrices":{"920":["ASDA","Ocado","Sainsburys","Tesco","Waitrose"],"016555":["ASDA","Sainsburys","Tesco","Waitrose"]},"TrolleyItems":["920","52200","1017"],"TrolleyLinks":["780"]}}]}&banner=34';

var req = http.request(ajaxUrl, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('JSONP');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
console.log('data\n');
console.log('data\n');
req.end();
查看了http文档,但找不到如何设置它。还使用Matt建议的答案尝试了节点请求模块,但也没有成功


正确的方法是什么?感觉我已经撞墙好几天了,非常感谢你的帮助

需要伪造用户代理。使用节点中的“请求”模块执行此操作。这很有效

request({
    headers: {
      'User-Agent': 'Mozilla/5.0 (X11; CrOS x86_64 6310.61.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.94 Safari/537.36',
    },
    uri: 'http://www.mysupermarket.co.uk/Api.aspx?Command={"Output":"JSONP","Commands":[{"Name":"Basket","Params":{"BrandStores":["780"],"ProductPrices":{"920":["ASDA","Ocado","Sainsburys","Tesco","Waitrose"],"016555":["ASDA","Sainsburys","Tesco","Waitrose"]},"TrolleyItems":["920","52200","1017"],"TrolleyLinks":["780"]}}]}&callback=jQuery17102980830231681466_1418310018496&_=1418220018508',
    method: 'GET'
  }, function (err, res, body) {
    if (err) console.log(err)
    else console.log('body', body);

  });

更新:在工作的JSFIDLE示例中,使用DevTools检查来自jQuery的请求的完整路径。但是,当我在Node.JS中将该URL用于http.get或请求时,返回403。为什么它在JSFIDLE中工作,然后在节点中失败?