HttpClient не подключается к URL из приложения UWP - PullRequest
0 голосов
/ 20 декабря 2018

Во-первых, я должен признать, что я не уверен, должен ли я использовать Windows.Web.Http.HttpClient или System.Net.Http.HttpClient.Кажется, Windows.Web.Http.HttpClient - это путь для UWP, но я попробовал оба безуспешно.

Из URL я ожидаю получить объект JSON.Когда я копирую и вставляю URL в браузер, я прекрасно вижу объект JSON.Если после подключения с помощью браузера я оставляю кэш-память в одиночку, у UWP не возникает проблем при чтении из кэша.Я использовал тот же код для подключения к https://jsonplaceholder.typicode.com/todos/1 и смог без проблем извлечь объект JSON оттуда.Вот моя основная попытка:

async void Connect()
    {
        using (Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient())
        {
            Uri uri = new Uri(@"https://www.nottheactualdomainname.com/?api=software-api&email=xxxx@xxxx.com&licence_key=xxxx&request=status&product_id=xxxxinstance=20181218215300");
            Windows.Web.Http.HttpResponseMessage httpResponse = new Windows.Web.Http.HttpResponseMessage();
            string httpResponseBody = "";

            try
            {
                httpResponse = await httpClient.GetAsync(uri);
                httpResponse.EnsureSuccessStatusCode();

                httpResponseBody = await httpResponse.Content.ReadAsStringAsync();

                if (JsonObject.TryParse(httpResponseBody, out JsonObject keyValuePairs))
                {
                    //handle JSON object
                }
                else
                {
                    //didn't recieve JSON object
                }

            }
            catch (Exception ex)
            {
                httpResponseBody = "Error: " + ex.HResult.ToString("X") + " Message: " + ex.Message;
            }
        }
    }

Я пытался включить это в различные моменты (т. Е. Перед оператором using, непосредственно перед инициализацией httpResponse и прямо перед оператором try):

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Также как это (зная, что я мог бы сделать это только во время отладки):

//for debugging ONLY; not safe for production
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

Иногда я получаю эту ошибку:

Ошибка: 80131500 Сообщение: код состояния ответа неуказывают на успех: 403 ().

И иногда я получаю эту ошибку:

Ошибка: 80190193 Сообщение: запрещено (403).

Или и то, и другое.Я пробовал это как с Windows.Web.Http.HttpClient, так и с System.Net.Http.HttpClient.

В конечном итоге мне потребуется убедиться, что в моем URL-адресе указаны соответствующие учетные данные для сервера.Однако неверные учетные данные должны просто возвращать JSON с информацией об ошибке, а я этого не получаю.Я могу подключиться к https://www.nottheactualdomainname.com. Что мне проверить дальше?

1 Ответ

0 голосов
/ 21 декабря 2018

Я нашел ответ здесь

Я смог использовать инструменты разработчика браузера для просмотра заголовков запросов.Затем я добавил это:

httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36");
...