gpt4 book ai didi

ssl - 请使用 ssl 证书发送 https 请求

转载 作者:太空宇宙 更新时间:2023-11-03 12:45:45 24 4
gpt4 key购买 nike

我有以下 Javascript 代码,当我使用 nodejs 运行它时,它运行良好。但是,我想写一些与 Dart 类似的东西。我浏览了 Dart 文档,但找不到任何示例。如果有人可以告诉我如何使用 Google Dart 重写以下内容,我将不胜感激。非常感谢!

var https = require('https');
var fs = require('fs');
var url = require('url');

var uri = "https://identitysso-api.betfair.com:443/api/certlogin";
var data = 'username=xxxxxxxx&password=xxxxxxxx';
var appKey = 'xxxxxxxxxxxxxx'

var options = url.parse(uri);
options.method = 'POST';
options.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Application': appKey
};
options.key = fs.readFileSync('client-2048.key');
options.cert = fs.readFileSync('client-2048.crt');
options.agent = new https.Agent(options);

var req = https.request(options, function(res) {
console.log("statusCode:", res.statusCode);
var responseData = "";
res.on('data', function(d) {
responseData += d;
});
res.on('end', function() {
var response = JSON.parse(responseData);
console.log("sessionToken:", response.sessionToken.replace(/\d/g, ''));
});
res.on('error', function(e) {
console.error(e);
});
});

req.end(data);

我有以下几点:-

import 'dart:io';

void main() {
var uri = "https://identitysso-api.betfair.com:443/api/certlogin";
var data = 'username=xxxxxxxx&password=xxxxxxxx';
var appKey = 'xxxxxxxxxxxx';
var method = 'POST';

HttpClient client = new HttpClient();
client.openUrl(method,Uri.parse(uri))
.then((HttpClientRequest request) {
request.headers.set(HttpHeaders.CONTENT_TYPE, 'application/x-www-form-urlencoded');
request.headers.set('X-Application', appKey);
request.write(data);
return request.close();
})
.then((HttpClientResponse response) {
// Process the response.
});
}

但是在告诉您如何向 HttpClient 或 HttpRequest 添加证书的文档中找不到任何内容?任何帮助都非常感谢提前收到。

最佳答案

从 1.13.0 版开始,现在可以在 Dart 中像在 node.js 中一样轻松地在 HTTPS 请求中发送客户端证书。在发出 HTTPS 请求之前,可以将 PEM 格式的客户端证书和 key 添加到默认的 SecurityContext 对象。

Dart 现在已改用 BoringSSL,这是由 Google 维护的 OpenSSL 的一个分支。 BoringSSL 使用以 PEM 格式存储在文件中的 X509 证书(SSL 和 TLS 使用的证书)。 Dart 的旧版本使用 NSS,它有自己的证书和 key 数据库,由命令行工具维护。 Dart 更改了 SecureSocket 方法的一些参数,并添加了一个 SecurityContext 类。

SecurityContext.defaultContext 是一个对象,包含知名证书颁发机构的内置可信根,取自他们用于 Firefox 和 NSS 的 Mozilla 数据库。所以你的客户端应该使用这个对象,并将客户端证书和私钥添加到它,所以它们将被用来对请求它们的服务器进行身份验证:

Future postWithClientCertificate() async {
var context = SecurityContext.defaultContext;
context.useCertificateChain('client-2048.crt');
context.usePrivateKey('client-2048.key',
password:'keyfile_password');
HttpClient client = new HttpClient(context: context);

// The rest of this code comes from your question.
var uri = "https://identitysso-api.betfair.com:443/api/certlogin";
var data = 'username=xxxxxxxx&password=xxxxxxxx';
var appKey = 'xxxxxxxxxxxx';
var method = 'POST';

var request = await client.openUrl(method,Uri.parse(uri))
request.headers.set(HttpHeaders.CONTENT_TYPE,
'application/x-www-form-urlencoded');
request.headers.set('X-Application', appKey);
request.write(data);
var response = await request.close();
// Process the response.
}

SecurityContext.useCertificateChain 和 SecurityContext.usePrivateKey 函数与用于设置服务器证书和 key 的函数相同,对于 SecureServerSocket,但是当上下文用于客户端连接时,它们指定要发送的客户端证书根据要求。

关于ssl - 请使用 ssl 证书发送 https 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388750/

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