C #: REST URL возвращает 404, а тот же URL работает в веб-браузере - PullRequest
0 голосов
/ 02 мая 2018

У меня есть этот REST API (GET), который отлично работает в браузере и выплевывает JSON. Я даже попробовал тот же API в Excel-VBA, используя XMLHTTP, и он отлично работает.

Но при попытке использовать тот же API в C # я получаю ошибки.

Сначала я получил:

"Базовое соединение было закрыто: произошла непредвиденная ошибка отправить. "

на линии

HttpResponseMessage response = client.GetAsync(urlParameters).Result;

Затем я установил протокол безопасности на `Tls11 ', и эта ошибка исчезла.

Теперь я собираюсь 404 в Resposne. URL-адрес правильный. Я могу запустить тот же URL-адрес в веб-браузере / VBA, но не в C #.

Любые предложения или помощь?

Извините, не могу поделиться реальным URL-адресом, связанным с его работой.

     private const string URL = "https://xxx-production-api.abc.com/api/listings/1790956";
        private string urlParameters = "?apiToken=64842d73-9761-456b-86fa-a75a409273ce";
        public string  Download()
        {

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(URL);

           client.DefaultRequestHeaders.Accept.Add(
           new MediaTypeWithQualityHeaderValue("application/json"));

           client.DefaultRequestHeaders.Add("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6,ru;q=0.4"); 
            // List data response.
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
            HttpResponseMessage response = client.GetAsync(urlParameters).Result;  // Blocking call!
            if (response.IsSuccessStatusCode)                
                    Console.WriteLine("Worked");                           
            else           
                Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); 
            }

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Отвечая на мой вопрос: Добавление агента пользователя в заголовки решило проблему для меня: client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")

Скопировал и вставил информацию заголовка из инструмента Chrome dev, и теперь URL работает и в C #.

0 голосов
/ 02 мая 2018

Убедитесь, что ваш рабочий брандмауэр / прокси не блокирует вызов.

Я столкнулся с подобными проблемами, и это последний код, который я использую для своих вызовов GET, посмотрите, работает ли он для вас. Основное отличие состоит в том, что я не использую ".Result", я использую "GetAwaiter (). GetResult ()".

using (var client = new HttpClient())
{
    var method = string.Format("{0}{1}", ApiUrl, urlPart);
    client.BaseAddress = new Uri(ApiUrl);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

    HttpResponseMessage response = client.GetAsync(method).GetAwaiter().GetResult();

    if (response.IsSuccessStatusCode)
    {
        var data = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();


        return data;
    }

    return default(T);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...