简单的说几句:由于之前一直做的是PC端的APP,没有做过WEB方面的项目,一直对类似抢票软件这样的程序很感兴趣,很想弄一款抢手机啊,秒杀啊的APP出来。之前做过一个类似按键精灵功能的APP,就是不停的模拟鼠标点击网页中的按钮。什么时候能够模拟浏览器来发送请求呢,一直没弄明白。现在C#中的HttpClient(微软文档)可以实现这样的功能了。。。当然学习它还是为了项目,项目中有需要个设备通信,采用的是HTTP的方式。
根据微软的文档说明使用该接口,必须要.NET 4.5 中的System.Net.Http.dll,所以运行时估计还要装Microsoft.NET Framework 4.5(可能有别的办法)
主要的方法 GET 和 POST
1.GetAsync方法
HttpClient httpClient = new HttpClient();
HttpResponseMessage response =new HttpResponseMessage();
try
{
//Get
response = httpClient.GetAsync(strUrl).Result;
strTemp = response.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
}
2.PostAsync方法(附带XML格式的数据)
HttpClient httpClient = new HttpClient();
HttpResponseMessage response =new HttpResponseMessage();
string xmlData = @"要附带的数据。。。";
try
{
StringContent postContent = new StringContent(xmlData);
postContent.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
response = httpClient.PostAsync(strUrl,postContent).Result;
strTemp = response.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
}
以上查找度娘,大把大把的例子。strTemp 返回的就是你访问页面返回的数据,根据strTemp 来取需要的数据,这么可以用的c#学习【XML处理】(可能会有这么一篇吧)读写XML,不经感慨C#封装的功能真特么丰富啊。
遇到的问题:
1. 用get或者post 一访问就异常,不知道什么原因 ex.Message,文言都是“出现一个或多个错误”,说了等于没说。后来百度 查到应该查看ex.InnerException中的提示错误,这里面说的比较详细,一看就明白。
什么网址不对,服务器关闭,基础连接已经关闭: 未能为 SSL/TLS 安全通道建。。。,看异常再处理。
这边说下最后一个错误吧,因为项目中用的设备开启后,声音吵的一比,震的耳朵疼,所以刚开始没连设备,就用假数据吭哧吭哧的编码,最后打算跑下真数据时,开机后没有一个能够URL能够访问的,都是异常。整个办公室吵的不行啊,又不知道为什么异常,整个人都不好了。。。后来发现之前测试的网页都是http://的,而设备的接口都是https://,https://的URL需要验证证书的,所以一直出现SSL的问题。
解决办法:在调用POST或GET方法前,调用下Util.SetCertificatePolicy();
//取消证书限制
public static class Util
{
public static void SetCertificatePolicy()
{
ServicePointManager.ServerCertificateValidationCallback
+= RemoteCertificateValidate;
}
private static bool RemoteCertificateValidate(
object sender, X509Certificate cert,
X509Chain chain, SslPolicyErrors error)
{
return true;
}
}