如何在
深圳图书馆
跟踪一本书
08
本文成于去年十二月,因写得太差不好意思发。现在二十多年过去了,活鱼格勒发了不少写得比这篇还要差得多的文,所以不如把这篇也发了吧。
既然我在图书馆失去了尤达大师,根据一些定理,易证我可以在图书馆把大师找回来。不仅要找回来,而且还要通知我,大师有没有被别人借走。
本文将以C#在.NET框架下实现针对深圳图书馆的爬虫程序,并加入提醒机制。像上一篇推送一样,在开始实现前我们需要讨论一些有关的问题。
![293a15f1e06592a4617f24c1db9aa710.gif](https://i-blog.csdnimg.cn/blog_migrate/ce93b73f85f214a6ab0aa16e0dfcbb02.gif)
HTTP请求
请求是一个很直观的过程:客户向服务器发送一个请求,服务器送回它的响应。发送请求的单位是报文,不同的网络协议要求不同格式的报文,这里不展开讨论。下面是我们将使用的HTTP协议的报文格式:
![32f6527b67e9f222d68f6a2b5b600f9b.png](https://i-blog.csdnimg.cn/blog_migrate/8f4047f72645ad330e1114e94cfa4775.png)
URL:接收请求的地址。一般来说浏览器上部地址框中展示的就是指向当前网页的URL。
请求方法:HTTP有六种请求方法,常用的是GET和POST。GET方法将请求的内容添加在URL后,以‘?’字符与URL主体分隔开来,因此使用GET方法的HTTP报文往往没有上图的“请求数据”。POST方法则将请求内容存放在报文末端的请求数据中。
由于GET格式的请求数据是直接包含在URL内的,而URL又必须按照相关协议规定以明文展示,所以可以很方便地分析GET请求。比如,百度搜索“晒布路”,实际请求的URL为:
![40c8f9da3aac98c9be72fe60ddf35e8b.png](https://i-blog.csdnimg.cn/blog_migrate/78f449f3a157e08ed25f10fb659835d9.png)
其中的……wd=%E6%99%92%E5%B8%83%E8%B7%AF是按照UTF-8编码转码“晒布路”三个中文字符得到的。这里不展开讨论字符编码和百分号编码格式,大部分浏览器甚至库函数会自动完成这种编码。
![293a15f1e06592a4617f24c1db9aa710.gif](https://i-blog.csdnimg.cn/blog_migrate/ce93b73f85f214a6ab0aa16e0dfcbb02.gif)
用C#实现HTTP请求
众所周知,.NET框架下有大量封装良好的库函数,相比于C/C++的关注底层实现,C#的关注于上层功能使人感到极度的愉悦。
为了实现GET方式的HTTP请求,我们使用HttpWebRequest与HttpWebResponse类,这两个类位于System.Net命名空间下。
---HttpWebRequest---
这个类支持大量的HTTP报文属性。在本例中我们只需要简单地提交一个GET请求,因此这里不展开讨论这些属性。
创建一个HttpWebRequest类:
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(webpath);
构造函数的参数即为请求的URL。
之后,设置这个实例的请求类型为GET:
request.He