gpt4 book ai didi

node.js - 如何使用nodejs发出子HTTP请求

转载 作者:可可西里 更新时间:2023-11-01 17:02:30 26 4
gpt4 key购买 nike

我想知道我如何使用 HTTP 请求或一些带有 nodejs 的库来发出第二个请求来享受第一个请求(外部 url)的 session 。下面是我如何使用 PHP 和 cURL 解决我的问题,我在哪里访问主 url 并使用 session (cookie)发出第二个请求

$app->get('/parada/:termo', function ($termo) use ($app) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://olhovivo.sptrans.com.br/');
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$store = curl_exec ($ch);
curl_setopt($ch, CURLOPT_URL, 'http://olhovivo.sptrans.com.br/v0/Parada/Buscar?termosBusca='.$termo);
$content = curl_exec ($ch);
echo $content;
curl_close ($ch);
});

我没有代码,因为我看到的所有关于 http.get 的示例都提出请求并关闭连接。

var http = require('http');
var options = {
host: 'example.com',
port: 80,
path: '/foo.html'
};

http.get(options, function(resp){
resp.on('data', function(chunk){
//new request??
});
}).on("error", function(e){
console.log("Got error: " + e.message);
});

我需要通过 http.get 进行导航,因为我需要捕获第一个 url 的 cookie 才能验证第二个 url。使用 PHP 的 cURL 很简单,因为不需要关闭第一个连接就可以发出第二个请求(保留 cookie)


我尝试在第一个请求中捕获 cookie,然后我尝试在第二个请求中的第一个请求中插入 cookie,但没有运行

var http = require('http');

var options = {
host: 'www.olhovivo.sptrans.com.br',
port: 80
};

http.get(options, function(resp){

var teste = resp.headers;
teste = teste['set-cookie'][0].split('=');
var cok = 'apiCredentials-v0='+teste[1].replace('; path', '');

resp.on('data', function(chunk){
//new request??
var options2 = {
host: 'www.olhovivo.sptrans.com.br',
port: 80,
"set-cookie": cok,
path: '/v0/Parada/Buscar?termosBusca=Paulista'
};
http.get(options2, function(resp2){
resp2.on('data', function(chunk2){
//new request??
http.createServer(function (req, res) {

//set content header
res.writeHead(200, {
'content-type': 'application/json'
});
//write msg
res.end(chunk2);
}).listen(8080);

console.log('Server running 0n 8080');
});
}).on("error", function(e){
console.log("Got error: " + e.message);
});
});
}).on("error", function(e){
console.log("Got error: " + e.message);
});

最佳答案

在下面的示例中,我发出第一个请求只是为了获取 cookie apiCredentials。我将此 cookie 添加到第二个请求的 header 中。第二个请求从提供者返回正确的数据(一个很好的 JSON 答案)。

var http = require("http");
var initialRequestOptions = {
host : 'olhovivo.sptrans.com.br',
port : 80,
path : '/'
};
var secondRequestOptions = {
host : 'olhovivo.sptrans.com.br',
port : 80,
path : '/v0/Parada/Buscar?termosBusca=Morato',
headers : {
// This cookie will be replaced by the one received on the previous request
'Cookie' : 'apiCredentials=39D1DE24EB4A....'
}
};
var firstRequest = http.request(initialRequestOptions, function(response) {
var cookie = response.headers['set-cookie'];
if (cookie) {
cookie = (cookie + '').split(";")[0];
secondRequestOptions.headers['Cookie'] = cookie;
}
var body = '';
response.on('data', function(chunk) {
body += chunk;
});
response.on('end', function() {
var secondRequest = http.request(secondRequestOptions, function(responseNew) {
var dataBody = '';
responseNew.on('data', function(chunk) {
dataBody += chunk;
});
responseNew.on('end', function() {
console.log(dataBody);
});
});
secondRequest.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
secondRequest.end();

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

关于node.js - 如何使用nodejs发出子HTTP请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com