1
votes

403 Interdit avec WebClient

La société pour laquelle je travaille a une connexion Internet limitée et nous utilisons le proxy (exemple: 10.10.10.10:8080) pour accéder à certaines connexions restreintes.

Je peux utiliser l'API dans Postman (en mettant le proxy dans le Paramètres du facteur) mais lors de la mise dans le code C # WebClient, cela me donne une erreur 403-Forbidden.

Je n'ai besoin que du champ var sensorData mais j'ai divisé en var data et var data2 pour comprendre où était le problème. Cela me donne l'erreur au niveau de var data = ...

Uri uri = new Uri("https://XXXXXXXX/api/DatasourceData/DatasourceDataHistoryBySerialNumber/");
Token token = new Token();
token = GetToken(tokenAPI);

using (WebClient client = new WebClient())
{
  try
  {
    client.Proxy = new WebProxy("10.10.10.10", 8080);
    client.Headers.Add("Authorization", "Bearer " + token.AccessToken);
    client.QueryString.Add("serialNumbersDatasource", "I2001258");
    client.QueryString.Add("startDate", string.Format("{0:s}", "2019-12-01"));
    client.QueryString.Add("endDate", string.Format("{0:s}", DateTime.Now));
    client.QueryString.Add("isFilterDatesByDataDate", "false");

    var data = client.DownloadData(uri);
    var data2 = (Encoding.UTF8.GetString(data));

    sensorData = (JsonConvert.DeserializeObject<List<Sensor>>(Encoding.UTF8.GetString(client.DownloadData(uri))))[0];
  }
}


0 commentaires

5 Réponses :



3
votes

Semble le problème à cette ligne

client.Headers.Add("Authorization", "Bearer " + tokenTest);

Ici, vous allez ajouter l'en-tête Authorization avec la valeur Bearer tokenTest

donc, 403 Forbidden renvoie par le service auquel vous vous adressez, mais pas par un proxy

changer en

client.Headers.Add("Authorization", "Bearer " + "tokenTest");

et vérifier si tokenTest code> a une valeur valide


1 commentaires

C'est ce que j'avais, j'ai changé pour mieux comprendre que je passais une corde. J'ai modifié le code pour qu'il ressemble à ce que j'ai



0
votes

Probablement un problème avec l'en-tête d'autorisation. Le jeton est-il valide? Fonctionne-t-il avec le même jeton dans Postman?

Je parie que l'API ne peut pas valider le jeton et ne vous donne aucune autorisation sur les ressources. C'est ce que signifierait un 403 (mais je ne sais pas ce que le programmeur d'API voulait réellement en vous donnant 403).

Avez-vous accès au code source de l'API?

Le token est vraiment une chaîne "tokentest" et qui fonctionne avec Postman?


4 commentaires

Non, le "tokentest" n'était qu'un exemple. J'ai déjà modifié pour être similaire à ce que j'ai


L'avez-vous essayé sans proxy pour savoir si le problème vient de l'API ou du serveur proxy?


J'ai essayé maintenant et il semble que cela ne fonctionne pas aussi sans le proxy. C'est bizarre parce que ça marche dans Postman


essayez-le avec la classe httpclient



0
votes

Je vous suggère d'opter pour xNet.dll au lieu de webclient car la bibliothèque xNet est considérée comme la meilleure pour proxy et webrequest.

var request = new HttpRequest()
request.UserAgent = Http.ChromeUserAgent();
request.Proxy = Socks5ProxyClient.Parse("10.10.10.10:8080");//can use socks4/5 http


0 commentaires

0
votes

D'après ceci

Essayez d'ajouter User-Agent dans l'en-tête p>

client.Headers.Add("User-Agent", "PostmanRuntime/7.26.1");


0 commentaires