我正在使用 request ( https://github.com/mikeal/request )从节点发送 http post 请求,并且我返回一个 null body。从 hurl.it 发送的相同请求将返回带有正确正文的正确响应。从同一 Nodejs 服务器发送到同一服务器的另一个请求也返回正确的正文。真正令人气愤的是,上周它还可以工作,但现在在 Nodejs 中不再工作了。
我的 server.js 是:
var request = require('request');
request({
uri: 'insert url here; contains sensitive info',
method: 'POST',
body: 'insert body here; contains sensitive info',
followRedirect: true,
maxRedirects: 10
}, function(error, response, body) {
console.log('body in response is: ' + body);
});
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题吗?
谢谢。
我正在尝试请求此网站,但我不断收到 400 Bad Request 错误。这段代码几乎适用于我尝试过的任何其他不是用 squarespace 构建的网站,所以我猜这就是问题所在。
var request = require('request');
var cheerio = require('cheerio');
var url = 'http://www.pond-mag.com/';
request(url, function(error, resp, body){
if(!error){
var $ = cheerio.load(body);
console.log(body);
}
});
Run Code Online (Sandbox Code Playgroud) 我有点迷路了。是否可以将响应主体作为字符串输入.on(response)(请参见下文)?还是我疯了?我知道我可以.pipe对进行响应WriteStream,但我需要将响应正文和响应statusCode放在同一位置,以便继续执行我的代码。谢谢!
var request = require("request");
request(url)
.on('response', function(response) {
console.log(response.statusCode); // 200
console.log(/* I need to get response body string here */); // <--- can I have the response body as a string here?
})
.on("error", function(err){
console.log("Problem reaching URL: ", err);
});
Run Code Online (Sandbox Code Playgroud) 在请求文档中,它记录了设置“useQuerystring”,内容如下:
useQuerystring - if true, use querystring to stringify and parse querystrings, otherwise use qs (default: false). Set this option to true if you need arrays to be serialized as foo=bar&foo=baz instead of the default foo[0]=bar&foo[1]=baz.
Run Code Online (Sandbox Code Playgroud)
我正在使用的 API 需要向同一参数名称发送多个值;这个设置似乎表明可以在使用 useQueryString 时完成,但我似乎无法弄清楚在哪里/如何传递查询字符串,以便正确处理它以及以什么格式执行它。
例如,我在以下代码中尝试了多个不同位置的查询字符串:
let options = {
uri: "https://api.mysite.com"[0],
headers: {
'Authorization': 'Bearer TOKEN_VALUE'
},
json: true,
useQuerystring: true,
querystring: "foo=bar&foo=baz",
qs: "foo=bar&foo=baz",
proxy: "http://localhost:8080",
strictSSL: false,
};
request.get(options);
Run Code Online (Sandbox Code Playgroud)
当我在选项“querystring”中传递查询字符串时,它会忽略它(又名,它似乎是错误的位置)。当我把它放在“qs”的“正常”位置时;我最终得到发送到服务器的以下 URL:
"?0=f&1=o&2=o&3=%3D&4=b&5=a&6=r&7=%26&8=f&9=o&10=o&11=%3D&12=b&13=a&14=z"
Run Code Online (Sandbox Code Playgroud)
使用 useQuerystring 设置为 true 时传递查询字符串的正确方法是什么?
根据以下文件,它看起来没有改变查询字符串的位置,所以我认为它是 qs; 但如上所述,这不起作用: …
我正在尝试使用节点请求模块从第三方服务获取一些数据,并将此数据作为字符串从函数返回。我的看法是request()返回一个可读的流,因为你可以这样做request(...).pipe(writeableStream)- 我认为 - 意味着我可以做到
function getData(){
var string;
request('someurl')
.on('data', function(data){
string += data;
})
.on('end', function(){
return string;
});
}
Run Code Online (Sandbox Code Playgroud)
但这并不奏效。我想我对 request() 或节点流的真正工作方式有一些错误的看法。有人可以在这里澄清我的困惑吗?
我试图从通过调用第三方API获得的数据返回我正在构建的对象.我正在使用Request(https://github.com/mikeal/request)模块来完成相同的工作.
但是,我想从回调函数返回此对象.
我的请求调用是javascript函数的一部分,我希望这个外部函数能够返回新构造的对象.我遇到问题是由于node.js的非阻塞性质,每当我尝试从外部函数返回对象时,它返回一个空对象,因为回调函数尚未构造对象.
我怎样才能做到这一点?
function getData(url){
var myWeatherData = new Object();
var data;
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
data = JSON.parse(body);
myWeatherData.locationName = data.current_observation.display_location.full;
myWeatherData.weather = data.current_observation.weather;
myWeatherData.temperature_string = data.current_observation.temperature_string;
myWeatherData.relative_humidity = data.current_observation.relative_humidity;
myWeatherData.wind_string = data.current_observation.wind_string;
myWeatherData.feelslike_string = data.current_observation.feelslike_string;
}
return myWeatherData; // THIS IS A RETURN FROM CALL BACK
});
// return myWeatherDataArr; -- THIS RETURNS AN EMPTY
};
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用node-request通过管道传输存储在Amazon S3上的图像。但是,有时不存在图像,该图像由S3作为状态代码403公开。我正在努力查看如何在成功的情况下进行管道传输(200),但在非200的情况下采取替代措施。
r.abort is not a function尽管似乎应该在请求中可用,但使用abort()方法似乎是一种方法,但是却获得了。
// context: inside a request handler, where `res` is the response to write to
const r = request(url)
.on('response', function (response) {
if (response.statusCode !== 200) {
r.abort(); //failing
// I want to stop the piping here and do whatever instead.
}
})
.pipe(res);
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
node-request ×7
node.js ×7
javascript ×4
express ×2
httprequest ×1
post ×1
squarespace ×1
stream ×1