C#:HTTP客户端与服务器的实现

HTTP协议算是使用最广泛的Web协议了,主要面向基于B/S的实现。对于很多语言比如PHP或者javascript等Web语言,HTTP协议使用上甚至比TCP协议更简单。但这协议对普通的系统语言程序员就不太友好了。C#这种语言嘛,支持上还行,但并没达到特别优秀的效果,比如发起一个POST请求至少需要十行代码以上。这个库是我基于对C#语言封装的协议的了解,在此基础上新增的一个更加方便开发的库。源码在 https://github.com/fawdlstty/hanHttpLib 查看或下载。因为可能更新频繁,所以源码我就不在文章里面贴了。
目前这个库不算特别优秀,目前只支持基础的调用,结构也非常简单,但它能力可不差,用来给小伙伴学习也是极好的。我将不定期更新它,力争将其做到完美。
先说说HTTP的客户端。HTTP客户端主要是浏览器用来请求Web服务器上的资源用的,最广泛的就是浏览器了。每个浏览器都有一套HTTP客户端实现方式,请求完成资源后在界面上显示。但随着时代的发展,HTTP协议有着基本化的趋势。因为使用HTTPS进行通讯可以使用非常小的代价就能非常安全的加密通讯数据。另外HTTP客户端也不止是做浏览器了,除此之外最大的用处是做爬虫。比如很多零散的数据分布在零散的Web服务器上,这时就可以使用爬虫技术将零散的数据归纳起来。更加厉害的就是,再结合人工智能技术,爬取数据之后使用人工智能进行分析,差不多就能成就改变世界的武器了。

虽然对于咱小白来说,都不太懂,但有这个梦啊。梦想还是要有,要不酒后的谈资还有啥。。。回归正题。这儿使用上面的HTTP客户端来实现发起请求。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
// 创建客户端链接对象,模拟手机访问,GET请求
hanHttpClient client = new hanHttpClient (hanHttp_UserAgent.Android, "GET");
// 设置连接地址
client.set_url ("https://cn.bing.com/search");
// 添加参数
client.add_param ("q", "test");
// 添加Cookie
//client.add_cookie ("test", "test");
// 执行请求
client.do_request ();
// 显示返回的内容
MessageBox.Show (client.m_result_data);

可以说用法是非常简单了,另外请求完成后还可以获取到服务器端设置的Cookie,如果不完全能满足需要,完全可以自己改代码,满足最终需求。
客户端说完了,下面说说服务器端。我对ASP.Net可以说又爱又恨,爱的是用来开发Web服务是相当简单,很方便就能开发出一个不错的网站。并且ASP.Net也是Web后台三大框架最简单的框架了。原生支持WebForm与MVC。可以使用模板页节省大量代码,支持全局初始化释放,POST请求或Form Submit不需Cookie,只要加入__VIEWSTATE与__VIEWSTATEGENERATOR的参数,ASP.Net后台自动识别Session等等。好处一时半会说不完,但因为毕竟是微软的东西,都向巨型化发展,搭建一个简单的Web服务也得配置整个完整的IIS环境,Windows环境用IIS还好,在Linux环境使用Apache或Nginx环境搭建ASP.Net网站就爽歪歪了,各种问题接踵而至。另外ASP.Net的权限与本地文件系统的权限纠缠不清,服务器与本地桌面应用程序交互特别麻烦,……总之一堆问题导致最终被PHP击败。
假如只需搭建一个简单的Web服务器,完全可以不用ASP.Net,使用库实现完全OK。示例代码:

1
2
3
4
5
6
// 创建HTTP服务器对象
hanHttpServer server = new hanHttpServer ();
// 开启服务并指定监听端口
server.start (8080);
// 停止服务
server.stop ();

注意服务器开启默认监听端口所有事件是需要管理员权限的,具体可以看开启服务的代码。服务的开启关闭是非常简单。程序内部使用了异步,所以调用线程会直接返回不阻塞。另外注意开启服务后就不要阻塞了,保持线程畅通^_^
服务的启动是非常简单,那么服务的处理呢?这个也简单,在hanHttpServer.cs中找到以下代码

1
2
3
4
// 此处根据str_url处理输出,假定输入内容写在str里
// 获取请求参数 get_value ("test")
string str = "ok";
res.StatusCode = 200;

此处改为自定义处理过程就ok了。

发布者

fawdlstty

又一只萌萌哒程序猿~~

《C#:HTTP客户端与服务器的实现》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注