403 запрещено с WebClient - PullRequest
0 голосов
/ 24 января 2020

Компания, в которой я работаю, имеет ограниченное соединение inte rnet, и мы используем прокси (пример: 10.10.10.10:8080) для доступа при некоторых ограниченных соединениях.

Я могу использовать API в Postman (установка прокси в настройках Почтальона), но при вводе кода C# WebClient выдает ошибку 403-Forbidden.

Мне нужно только поле var sensorData, но я разделил на var data и var data2 чтобы понять, где была проблема. Это дает мне ошибку в 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];
  }
}

Ответы [ 4 ]

2 голосов
/ 24 января 2020

Кажется, проблема в этой строке

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

здесь вы добавите заголовок Authorization со значением Bearer tokenTest

так, 403 Запретный возврат по службе, к которой вы обращаетесь, но не прокси

изменить на

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

и проверить, имеет ли tokenTest правильное значение

0 голосов
/ 24 января 2020

Я бы посоветовал вам go для xNet .dll вместо веб-клиента. Поскольку библиотека xNet считается лучшей для прокси и веб-запросов.

var request = new HttpRequest()
request.UserAgent = Http.ChromeUserAgent();
request.Proxy = Socks5ProxyClient.Parse("10.10.10.10:8080");//can use socks4/5 http
0 голосов
/ 24 января 2020

Возможно, проблема с заголовком авторизации. Действителен ли токен? Работает ли он с тем же токеном в Почтальоне?

Могу поспорить, API не может проверить токен и не дает вам доступа к ресурсам. Вот что может означать 403 (но не знаю, что на самом деле программист API хотел дать вам 403).

У вас есть доступ к исходному коду API?

Токен действительно строка "tokentest" и что работает с почтальоном?

0 голосов
/ 24 января 2020

Проверьте, нужны ли вам дополнительные свойства прокси. Возможно, вам потребуется включить:

UseDefaultCredentials (Boolean) true, если используются учетные данные по умолчанию; иначе ложно. Значением по умолчанию является false

Кроме того, проверьте полный URL-адрес и строку запроса, которую вы создаете - посмотрите на исходящий запрос, сгенерированный (в отладчике) или через Fiddler и сделайте убедитесь, что все строки, URL, строка запроса, заголовки и т. д. c.

Из документов :

Адрес Получает или задает адрес прокси-сервера.

BypassArrayList Получает список адресов, которые не используют прокси-сервер.

BypassList
Получает или задает массив адресов, которые не используют прокси-сервер.

BypassProxyOnLocal
Получает или задает значение, указывающее, следует ли обходить прокси-сервер для локальных адресов.

Credentials Получает или задает учетные данные для отправки в прокси-сервер для аутентификации.

UseDefaultCredentials
Получает или задает логическое значение, которое определяет, отправляются ли DefaultCredentials с запросами.

...