Я пытаюсь заставить работать скребок, где используется двухфакторная аутентификация (Duo). Каждый раз, когда я отправляю POST для попытки аутентификации, происходит сбой с 400 (неверный запрос). Вот последняя версия кода, который я пробовал:
use Goutte\Client;
$client = new Client();
$res = $client->request('POST', 'https://example.com/cosign.cgi', [
'body' => 'login=theuser&password=thepassword&service=theservice&passcode=8675309',
]);
В теле страницы с ошибкой сказано, что куки должны быть включены. Тем не менее, куки включены в $ client.
«https://example.com/cosign.cgi«- вероятно, это оболочка над API-интерфейсами DSA (CoSign). Пожалуйста, раскройте код, приведенный ниже. Относительно того, как использовать двухфакторную аутентификацию при входе в систему: для получения полной информации об API-интерфейсах DSA см. Руководство программиста DSA и к DSA Developer Center. RESTFull API был представлен в DSA v8.2 +. Вот пример:
<?php
$request = new HttpRequest();
$request->setUrl('https://cosign:8081/sapiws/v1/digital_signature');
$request->setMethod(HTTP_METH_PUT);
$request->setHeaders(array('postman-token' => 'c37705a2-4e8a-eb47-fcbe-62568507717b',
'cache-control' => 'no-cache',
'content-type' => 'application/json',
'authorization' => 'Basic YXZpdjoxMjM0NTY3OEFi'));
$request->setBody('{ "signField" : {"file":"BASE64PDFContent",
"FileType": "PDF",
"signPassword": "password",
"signPasswordType": "STRING"}
}');
try {
$response = $request->send();
echo $response->getBody();
}
catch (HttpException $ex) {
echo $ex;
}
Введите пароль для входа в учетную запись подписавшего DSA в базовом заголовке авторизации. Вставьте OTP в поле «signPassword».
Заменить CoSign заполнитель в https: // CoSign: 8081 / sapiws / v1 / digital_signature с вашим правильно выставленным устройством DNS.
Других решений пока нет …