Cześć,
krótkim słowem wstępu -> próbuję uzyskać dostęp do endpointów API serwisu GTmerix (serwis, który testuje strony pod kątem powiedzmy wydajności), przykładowe endpointy serwisu:
https://gtmetrix.com/api/2.0/tests/{id_testu}
https://gtmetrix.com/api/2.0/reports/{id_raportu}/resources/lighthouse.json
Autentykacja do API wygląda w sposób następujący:
The GTmetrix API uses HTTP Basic Access Authentication as its authentication mechanism. Use your API key as the username and leave the password blank.
W ramach ich API korzystałem już z kilku/kilkunastu endpointów (zarówno POST jak i GET) i nigdy nie miałem z nimi problemów. Jedyny problem to z endpointem https://gtmetrix.com/api/2.0/tests/{id_testu} .
Kiedy wywołuje go z poziomu Postman'a wszystko działa ok, jednak kiedy wykonuje go z poziomu kodu (RestSharp) za każdym razem otrzymuje response 401 Unauthorized. To samo ma miejsce gdy nawet wygeneruje z Postman kod zapytania jako RestSharp i uruchomię w VS.
Case I
Wywołanie endpointa https://gtmetrix.com/api/2.0/reports/{id_raportu}/resources/lighthouse.json
Postman
RestSharp
var client = new RestClient("https://gtmetrix.com/api/2.0/reports/{id_raportu}/resources/lighthouse.json");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic {api_key}");
IRestResponse response = client.Execute(request);
Console.WriteLine($"Response status: {response.StatusCode}");
Console.WriteLine($"Response number: {(int)response.StatusCode}");
Debuger
Case II
Wywołanie problematycznego endpointa https://gtmetrix.com/api/2.0/tests/{id_testu}
Postman
RestSharp
var client = new RestClient("https://gtmetrix.com/api/2.0/tests/TfIhsql3");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Basic {api_key}");
IRestResponse response = client.Execute(request);
Console.WriteLine($"Response status: {response.StatusCode}");
Console.WriteLine($"Response number: {(int)response.StatusCode}");
Debuger
Jako ciekawostkę wklejam odpowiedź jaką uzyskałem z suportu GTmerix:
Czyli w logach nie widzą, że przesyłam klucz API, podczas gdy w przypadku problematycznego requesta otrzymuje response, że klucz został wysłany