C# WebClient Get获取网页内容
//不知道怎么删除,只好留着
1. Get方式:
WebClient web = new WebClient();
var html = web.DownloadString(url);
2. Post方式
/// <summary>
///
/// </summary>
/// <param name="web"></param>
/// <param name="url"></param>
/// <param name="queryString">格式: paramname=value@name2=value2</param>
/// <param name="clearHeads"></param>
/// <returns></returns>
public static string Post(this MyWebClient web, string url, string queryString, bool clearHeads=false)
{
string postString = queryString;// WebUtility.UrlEncode( queryString);//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进来
byte[] postData = Encoding.UTF8.GetBytes(postString);//编码,尤其是汉字,事先要看下抓取网页的编码方式
web.RequestConentLength = postData.Length;
if (clearHeads)
{
web.Headers.Clear();
web.Headers.Add("Content-Type", "application/x-www-form-urlencoded");//采取POST方式必须加的header,如果改为GET方式的话就去掉这句话即可
} byte[] responseData = web.UploadData(url, "POST", postData);//得到返回字符流
string srcString = Encoding.UTF8.GetString(responseData);//解码
return srcString;
}
3. Headers设置
web.Headers.Add(HttpRequestHeader.Accept, "*/*");
web.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
web.Headers.Add(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9");
//web.Headers.Add(HttpRequestHeader.Connection, "keep-alive");
web.Headers.Add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
web.Headers.Add(HttpRequestHeader.Host, "wenshu.court.gov.cn");
web.Headers.Add("Origin", "http://wenshu.court.gov.cn");
//web.Headers.Add("Proxy-Connection", "keep-alive");
web.Headers.Add(HttpRequestHeader.UserAgent, userAgent);
web.Headers.Add("X-Requested-With", "XMLHttpRequest");
web.Headers.Add(HttpRequestHeader.Referer, WebUtility.UrlEncode(Referer1));
4.Cookie、超时等高可用基类
public class MyWebClient : WebClient
{
public CookieContainer Cookies ; public MyWebClient(CookieContainer cookieContainer)
{
this.Cookies = cookieContainer;
} public int TimeoutSeconds { get; set; } = ; public WebRequest Request { get; set; } public int RequestConentLength; protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest; if (request != null)
{
request.Method = "Post";
request.CookieContainer = Cookies;
request.Timeout = * TimeoutSeconds;
request.ContentLength = RequestConentLength;
} Request = request;
return request;
} public WebResponse Response { get; set; } protected override WebResponse GetWebResponse(WebRequest request)
{
this.Response = base.GetWebResponse(request);
return this.Response;
} public string GetCookieValue(string cookieName)
{
var cookies = this.Cookies.GetCookies(this.Request.RequestUri);
var ck = cookies[cookieName];
return ck?.Value;
}
}
特别注意,一个浏览器对于网站多次请求的情况,要创建多个WebClient对象,但是它们应该共用一个CookieContainer。 而当写爬虫,模拟多个浏览器会话时,又不应全部使用同样的CookieContainer对象,以避免会话冲突。
附赠一个C#调用JS脚本的代码:
public string CallJs(string jsCall , string jsFunctions)
{
Type obj = Type.GetTypeFromProgID("ScriptControl");
if (obj == null) return null;
object ScriptControl = Activator.CreateInstance(obj);
obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JavaScript" });
//string js = "function time(a, b, msg){ var sum = a + b; return new Date().getTime() + ': ' + msg + ' = ' + sum }";
obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { jsFunctions }); //return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "time(3, 5, '3 + 5')" }).ToString();
return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { jsCall }).ToString();
}
使用示例:
string js = "function jsfunction(parm){ return parm + "abc"; }";
string val = CallJs($"jsfunction('{csvar}')", js.ToString());
C# WebClient Get获取网页内容的更多相关文章
- C#获取网页内容 (WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
获取网页数据有很多种方式.在这里主要讲述通过WebClient.WebBrowser和HttpWebRequest/HttpWebResponse三种方式获取网页内容. 这里获取的是包括网页的所有信息 ...
- C#获取网页内容的三种方式
C#通常有三种方法获取网页内容,使用WebClient.WebBrowser或者HttpWebRequest/HttpWebResponse... 方法一:使用WebClient (引用自:http: ...
- C#获取网页内容的三种方式(转)
搜索网络,发现C#通常有三种方法获取网页内容,使用WebClient.WebBrowser或者HttpWebRequest/HttpWebResponse... 方法一:使用WebClient (引用 ...
- C# -- WebClient自动获取web页面编码并转换
C# -- WebClient自动获取web页面编码并转换 抽个时间,写篇小文章,最近有个朋友,用vb开发一个工具,遇到WebClient获取的内容出现乱码,可惜对vb不是很熟悉,看了几分钟vb的语法 ...
- 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
最近经常需要下载一些东西,而这个下载地址又会经过层层跳转,每个页面上都有很多广告,烦不胜烦,所以做了一个一键获得最终下载地址的小工具.使用C#,来获取网页内容,然后通过HtmlAgilityPack获 ...
- 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)
定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...
- 使用Jsoup获取网页内容超时设置
使用Jsoup获取网页内容超时设置 最近使用Jsoup来抓取网页,并对网页进行解析,发现很好用.在抓取过程中遇到一个问题,有些页面总是报Timeout异常,开始想是不是被抓取网站对IP进行了限制,后来 ...
- 基于apache —HttpClient的小爬虫获取网页内容
今天(17-03-31)忙了一下午研究webmagic,发现自己还太年轻,对于这样难度的框架(类库) 还是难以接受,还是从基础开始吧,因为相对基础的东西教程相多一些,于是乎我找了apache其下的 H ...
- 使用selenium和phantomJS浏览器获取网页内容的小演示
# 使用selenium和phantomJS浏览器获取网页内容的小演示 # 导入包 from selenium import webdriver # 使用selenium库里的webdriver方法调 ...
随机推荐
- 有关使用 iview 表单验证的问题
Vue的UI解决框架,element-UI, iview-UI 有关表单验证使用的是同一个插件,async-validator,有关这个插件的用法就不做赘述,但是在iview表单的使用中可能会用到验证 ...
- 小程序UI
从input组件说起 <input maxlength="10" placeholder="最大输入长度10" /> <div id=&quo ...
- C#-XML-数据传输
http://www.cnblogs.com/fengxuehuanlin/p/5631664.html 关于xml是属于一个比较重要的东西,在平时开发的过程中,这块内容最主要的是要掌握XML内容的读 ...
- Python logger模块
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- MySQL 8.0复制性能的提升(翻译)
What’s New With MySQL Replication in MySQL 8.0 MySQL复制从问世到现在已经经历了多个年头,它的稳定性和可靠性也在稳步的提高.这是一个不停进化的过程,由 ...
- 在datagridview中添加button按钮
.Net的DataGridView控件中,提供了一种列的类型,叫 DataGridViewButtonColumn ,这种列类型是展示为一个 按钮,可以给button赋予相应的text,并且,此but ...
- [翻译] FLAnimatedImage
FLAnimatedImage FLAnimatedImage is a performant animated GIF engine for iOS: FLAnimatedImage是一个播放gif ...
- centos6.3_gcc安装软件及流程
分享链接下载文件上传安装即可 链接:https://pan.baidu.com/s/15eUhm9LTUdHDPkXOyRb9Tg 密码:tohr # 文件内置安装脚本,直接安装即可 [root@lo ...
- Exchange Server 2016 管理邮箱收发限制
备注:本文是Exchange Server 2016管理系列的配套课件,更加详细的讲解请参考视频课程,文章结尾有视频课程主页的链接. 进行收发邮件大小的限制是很有必要的,因为邮件服务器不能当作文件服务 ...
- 小J学python--Exception-异常
现在我们要打开一个名为fuck的文件,fuck是不存在的,看看异常是怎么工作的 不捕获异常的情况 #打开文件 open('fuck') 执行结果 捕获所有异常 Exception是所有异常类的父类,所 ...