[System.Net]模拟Web请求编写简易单词查询客户端
2018-06-18 05:04:29来源:未知 阅读 ()
demo: 我就不上传了
前言
在实际生活中,网络请求的应用极其常见,比如使用浏览器,程序中我们还要调用webservice。那么浏览器是怎么请求网络资源的呢?不用它可以自己请求不?
答案是可以的。
如果我们可以用自己的程序主动发起网络请求,那么我们可以:模拟提交数据,做一些简单网页游戏的外挂,可以刷一些帖子的访问量,可以抓取网络上的资源……
废话不我说,此文以使用Get方式对有道词典网进行请求为核心,编写了一个简单的单词查询客户端。正则表达式不太懂可以改为字符串基本操作,或者对其自己做一下基本的了解和学习。
【注:致初学都系列,一般以简单有意义的demo为例,介绍某类知识点(此文已以黑体标出)。其中API不懂的可以留言讨论。如有兴趣可以查询MSDN进行深入学习(笔者所期望的)】
效果图:
代码:
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace NetCapture { /// <summary> /// base类。以后我们可能写别的类似请求,通过继承此类,可以省下一些代码。 /// </summary> public abstract class GetScraperBase { //正则表达式的匹配模式 protected abstract string Pattern { get; } //如何过滤正则表达式匹配的结果 protected abstract Dictionary<string, string> FilterMatch(Match match); //抓取网页上的内容 public Dictionary<string, string> Scrape(string url, WebProxy proxy = null) { var request = WebRequest.Create(url); //创建request if (proxy != null) { request.Proxy = proxy;//可能你在一些环境上不了网,得使用代理服务器 }
var response = request.GetResponse(); //获取response var stream = response.GetResponseStream(); var responseReader = new StreamReader(stream); var content = responseReader.ReadToEnd(); //读取response(页面对应的html) var match = Regex.Match(content, Pattern, RegexOptions.IgnorePatternWhitespace); //筛选内容 return FilterMatch(match); } } public class YouDaoScaper : GetScraperBase { protected override string Pattern { get { /* Target result in response: <div class="trans-container"> <ul> <li>n. 试验;检验</li> <li>vt. 试验;测试</li> <li>vi. 试验;测试</li> <li>n. (Test)人名;(英)特斯特</li> </ul> * * there are two groups in this pattern, first is '<li>(?<content>.+)</li>[\r\n\s]*' * it's an unnamed group, it has four capture: * first is '<li>n. 试验;检验</li>' and so on. * * another group is and named group 'content' , it has four capture, in this sampe: * capture 1 is 'n. 试验;检验' and so on. */ return @"<div\sclass=""trans-container"">[\r\n\s]* <ul>[\r\n\s]* (<li>(?<content>.+)</li>[\r\n\s]*)* </ul>"; } } protected override Dictionary<string, string> FilterMatch(Match match) { var dict=new Dictionary<string, string>(); var content = ""; var group=match.Groups["content"]; if(group.Success) { foreach (Capture capture in group.Captures) { content += (capture.Value + "\n"); } } dict["content"]=content; return dict; } public string QueryWord(string word) { var url= "http://dict.youdao.com/search?q="+word; var dict = Scrape(url); return dict["content"]; } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Ap 2020-06-11
- eclipse下创建Maven项目(包含webapp目录结构) 2020-06-09
- SpringBoot通过web页面动态控制定时任务的启动、停止、创建 2020-06-09
- Idea实现SpringBoot外置Tomcat的Web项目热部署(包含静态文 2020-06-04
- Spring Boot 开发集成 WebSocket,实现私有即时通信系统 2020-05-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash