2

所以我看到几个月前有一个请求超级代理允许您在请求中指定 CA。似乎没有更新文档以反映此更改,因此我似乎无法弄清楚如何去做。

我正在尝试在我的本地机器上测试一个 REST 服务,它同时公开 http 和 https 端点。所有 http 的工作正常,SSL 的......嗯......不是那么多。

在昨天花了一整天的时间处理证书错误之后,我 90% 确定我的服务器工作正常。Curl 似乎是这么认为的,vanilla 节点请求对象也是如此。

我假设 superagent 可能在后台创建了一个请求——我只需要知道如何为它传递 CA。

提前致谢。

4

2 回答 2

3

他们的测试中有一个使用示例

基本上:

var https = require('https'),
    fs = require('fs'),
    key = fs.readFileSync(__dirname + 'key.pem'),
    cert = fs.readFileSync(__dirname + 'cert.pem'),
    assert = require('better-assert'),
    express = require('express'),
    app = express();

app.get('/', function(req, res) {
    res.send('Safe and secure!');
});

var server = https.createServer({
    key: key,
    cert: cert
}, app);

server.listen(8443);

describe('request', function() {
    it('should give a good response', function(done) {
        request
            .get('https://localhost:8443/')
            .ca(cert)
            .end(function(res) {
                assert(res.ok);
                assert('Safe and secure!' === res.text);
                done();
            });
    });
});
于 2014-08-19T14:04:06.557 回答
0

这对我有用:

    ...
    var user = request.agent({ca: cert});
    ...

完整示例:

var expect = require('chai').expect;
var should = require('should');
var request= require('superagent');
var fs = require('fs');
var cert = fs.readFileSync('sslcert/server.crt', 'utf8');

var validUser = { username: 'test@test.com', password: 'secret111' };

describe('User', function() {
    // provide certificate as agent parameter
    var user = request.agent({ca: cert});

    it("/login", function(done) {
        user
            .get('https://localhost:3000/login')
            .end(function(err, res) {
                if(err) throw err;
                // HTTP status should be 200
                res.status.should.equal(200);
                user
                    .post('https://localhost:3000/login')
                    .send(validUser)
                    .end(function(err, res) {
                        if(err) throw err;
                        // HTTP status should be 200
                        res.status.should.equal(200);
                        done();
                        // user will manage its own cookies
                        // res.redirects contains an Array of redirects
                    });
            });
    });

    it("/", function(done) {
        user
            .get('https://localhost:3000/')
            .end(function(err, res) {
                if(err) throw err;
                // HTTP status should be 200
                res.status.should.equal(200);
                done();
        });
    });

    it("/logout", function(done) {
        user
            .get('https://localhost:3000/logout')
            .end(function(err, res) {
                if(err) throw err;
                // HTTP status should be 200
                res.status.should.equal(200);
                done();
            });
    });

});
于 2016-01-05T19:21:51.997 回答