Мне нужно разработать задание .NET, которое запускает выполнение в программном обеспечении HPOO, вызывая конечную точку API, для которой требуется токен CSRF.
Прежде, чем я начал кодировать, я тестировал сценарий в Postman:
- вызов обычной конечной точки GET только с базовой аутентификацией
- , возвращающей токен CSRF
- и, наконец, вызов POST API, передача базовой аутентификации вместе с токеном CSRF.
Когда я выполнял эти тесты в Postman, все работало, как и ожидалось.
Когда я пытаюсь реализовать тот же сценарий в коде, программа блокируется при вызове конечной точки POST (передача токена).
Следуйте моему коду ниже:
ServicePointManager.ServerCertificateValidationCallback = delegate (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
var uriExecution = new Uri("https://hpoo-api.com.br/oo/rest/v2/executions");
var cookies = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriExecution);
request.Method = "GET";
request.ContentType = "application/json; charset=utf-8";
request.Headers.Add("Authorization", "Basic " + GetBasicAuthenticaton());
request.CookieContainer = cookies;
var response = request.GetResponse();
var csrf = response.Headers.Get("X-CSRF-TOKEN");
HttpWebRequest request2 = (HttpWebRequest)WebRequest.Create(uriExecution);
request2.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.Accept = "application/json";
request2.Headers.Add("Authorization", "Basic " + GetBasicAuthenticaton());
request2.Headers.Add("X-CSRF-TOKEN", csrf);
request2.CookieContainer = cookies;
var response2 = request2.GetResponse();
В тот момент, когда мой код вызывает метод GetResponse()
из request2
, я получаю исключение о том, что мне запрещен доступ (403),
Я тоже пытался с библиотекой HttpClient
, но я получил ту же ошибку, указав, что я забыл токен CSRF.
Некоторые вещи, которые я уже пробовал, которые не работали:
- Создан новый
CookieContainer
со всеми файлами cookie в первом запросе и передачей в запрос 2. - Удален заголовок CSRF, только файлы cookie.
- Удаленокуки, только передавая заголовок.
- Удален заголовок CSRF, только передавая запрос CSRF и куки.
- Удалена базовая аутентификация, только передавая заголовок CSRF и куки.
Пожалуйста, кто-нибудь может мне помочь?Извините за мой плохой английский, бразильский здесь ...