难以使用http.request将jQuery-JSONP查询转换为Node.JS查询
长期(3个月)读者,第一次海报。我有一个客户端jquery AJAX请求,请求一些JSONP数据,我正试图将其转换为http.request,这样我就可以在Node.js服务器上的服务器端使用它 jQuery工作起来非常简单:这里是JSfiddle,这里是代码:难以使用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":[{"
$.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中工作,然后在节点中失败?