Мне нужно «перевести» приведенный ниже код в Java-эквивалент. Это запрос, в котором вы отправляете pdf-файл на base64, и ответ будет тем же файлом на base64 со знаком.
Выполнено почти все, кроме части "agentOption".
const fs = require('fs');
const request = require('request');
let main_url = 'the url'
let mimeType = 'application/pdf'
function base64_encode(file) {
var binary = fs.readFileSync(file);
return new Buffer(binary).toString('base64');
}
var base64 = base64_encode('my_file.pdf'); // Arquivo a ser assinado.
const queryString = {
numeroDocumento: '03771234560107',
senha: '12349696',
mimeType: mimeType,
politicaAssinatura: '1'
}
const options = {
method: 'POST',
uri: main_url,
qs: queryString,
agentOptions: {
// Utilizando crt e key:
// cert: fs.readFileSync('certificados/cert.crt'),
// key: fs.readFileSync('certificados/key.key')
pfx: fs.readFileSync('certificados/meu_certificado.pfx'), // Caminho para o certificado
passphrase: 'senhaCertificado123' // Senha certificado
},
form: {
arquivo: base64
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
let fileName = "meu_arquivo_agora_assinado.pdf";
fs.writeFile(fileName, body, 'base64', function(err) {
console.log(err);
});
console.log("Concluído");
}
}
request(options, callback);
Ява-код, который я сделал до сих пор. Без охттп тоже было бы неплохо:
OkHttpClient client = new OkHttpClient();
HttpUrl.Builder urlBuilder = HttpUrl.parse(host).newBuilder();
urlBuilder.addQueryParameter("numeroDocumento", "03771234560107");
urlBuilder.addQueryParameter("senha", password);
urlBuilder.addQueryParameter("mimeType", "application/pdf");
urlBuilder.addQueryParameter("politicaAssinatura", "1");
String url = urlBuilder.build().toString();
RequestBody body = new FormBody.Builder().add("arquivo", encodedString).build();
Map<String, Object> agentOptions = new HashMap<>();
agentOptions.put("pfx", new File(certName));
agentOptions.put("passphrase", password);
Request request = new Request.Builder()
.url(url)
.post(body)
.header("Content-Length", String.valueOf(encodedString.length() + 8))
.build();
Response response = client.newCall(request).execute();
String res = response.body().string();
if (response.code() == 200) {
toFile(res);
} else {
System.out.println(res);
}
Буду признателен за любые предложения.