首先,我必须承认我不确定是否应该使用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。接下来我应该检查什么?
答案 0 :(得分:1)
我找到了答案here
我能够使用浏览器开发人员工具查看请求标头。然后我添加了这个:
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");