使用 HttpRequester 更方便的发起 HTTP 请求
使用 HttpRequester 更方便的发起 HTTP 请求
Intro
一直感觉 .net 里面(这里主要说的是 .net framework 下)发送 HTTP 请求的方式用着不是特别好用,而且在 .net framework 里发送 HTTP 请求的方式有好几种,如:WebClient
/WebRequest
/HttpClient
,于是自己封装了一个 HttpRequester
WebClient
主要是用来下载,不能对 HTTP 做较多的自定义,HttpClient
是微软后来加入的,也是比较推荐使用的处理 HTTP 请求的,但是在 .net framework 下如果不注意的话可能会造成很大的灾难,从 .net core 2.1 开始,微软引入了 HttpClientFactory
去解决了一些问题,如果你是在 .net core 程序下跑的话,推荐使用 HttpClient
,如果在 .net framework 下跑的话可以使用 WebRequest
,这里说明一下,.net core 下,WebRequest
内部也是基于 HttpClient
的,详细可以参考 https://github.com/dotnet/corefx/blob/master/src/System.Net.Requests/src/System/Net/HttpWebRequest.cs#L1096。
HttpRequester
是基于 WebRequest
封装的,使用比较简洁的 Fluent API 的方式调用,如果是在 .net framework 下开发,可以尝试使用一下,具体使用可以参考下面的示例以及 Github 上的示例代码 示例代码2
添加 Nuget 包引用
添加对 WeihanLi.Common
的引用,需要 1.0.14 及以上版本
使用 HttpRequester
var result = new HttpRequester("https://weihanli.xyz") // 使用 GET 方式请求 https://weihanli.xyz
.Execute(); // 返回 responseText
System.Console.WriteLine(result);
// 使用 POST 方法请求 https://accounting.weihanli.xyz/Account/LogOn
var loginResult = new HttpRequester("https://accounting.weihanli.xyz/Account/LogOn", HttpMethod.Post)
.WithHeaders(new Dictionary<string, string>()
{
{ "X-Requested-With", "XMLHttpRequest" },
}) // 设置请求头
// .AjaxRequest(true)
// 设置 Referer,在做爬虫时会比较有用,还可以通过 WithProxy("proxyUrl") 设置代理
.WithReferer("https://accounting.weihanli.xyz/Account/Login?ReturnUrl=%2F")
// 手动设置 UserAgent,默认会随机设置一个 UA
.WithUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36")
.WithFormParameters(new Dictionary<string, string>()
{
{"Username","liweihan" },
{"Password", "112233" },
{"RememberMe","false" }
}) // 设置 post 的 form 参数
// 获取返回的 responseText,并 json 反序列化为一个强类型的Model
.Execute<WeihanLi.Common.Models.JsonResultModel<bool>>();
System.Console.WriteLine(loginResult.ToJson());
// 上传文件示例
var uploadFileResponse = new HttpRequester("https://graph.baidu.com/upload", HttpMethod.Post)
.WithFile($@"{System.Environment.GetEnvironmentVariable("USERPROFILE")}\Pictures\4e6ab53e383863ed4d15252039f70423.jpg", "image", new Dictionary<string, string>()
{
{ "tn","pc" },
{ "from","pc" },
{ "image_source","PC_UPLOAD_SEARCH_FILE" },
{ "range","{\"page_from\": \"searchIndex\"}" },
}) // 设置上传文件,并设置其它 form 参数信息
.WithReferer("https://baidu.com/") // 设置 referer
.WithUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36")
.ExecuteForResponse(); // 获取一个 HttpWebResponse 对象,可以使用 StatusCode/ ResponseHeader 等信息
System.Console.WriteLine($"Response status:{uploadFileResponse.StatusCode}, result:{uploadFileResponse.ReadToEnd()}");
More
除了 Header/Referer/UserAgent 之外,还可以设置 Proxy,设置 Cookie,Ajax 请求 等信息,而且还可以直接 PostJson 示例如下:
new HttpRequester("requestUrl", HttpMethod.Post)
.WithProxy("proxyUrl") // 使用代理 //.WithProxy("url", "userName", "password") // 配置带密码的代理
.WithCookie(cookie) //带 Cookie 访问 //.WithCookie("url", cookie) // 只用指定路径的 cookie
.WithJsonParameter(entity) // post 一个 json 对象,content-type 会自动设置为 `application/json`
.AjaxRequest(true) // 设置该请求是 Ajax 请求
.Execute();
Memo
欢迎体验~,如果有什么问题或者发现什么 bug 欢迎和我联系或者给我提 issue
使用 HttpRequester 更方便的发起 HTTP 请求的更多相关文章
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 关于java发起http请求
我们到底能走多远系列(41) 扯淡: 好久没总结点东西了,技术上没什么总结,感觉做事空牢牢的.最近也比较疲惫. 分享些东西,造福全人类~ 主题: 1,java模拟发起一个http请求 使用HttpUR ...
- Ajax_02之XHR发起异步请求
1.Ajax: AJAX:Asynchronous Javascript And Xml,异步的JS和XML: 同步请求:地址栏输入URL.链接跳转.表单提交-- 异步请求:使用Ajax发起,底层使用 ...
- python urllib2 发起http请求post
使用urllib2发起post请求 def GetCsspToken(): data = json.dumps({"userName":"wenbin", &q ...
- libcurl发起post请求时间延迟问题。except为空即可
最近在做团购酒店APP分享到qzone功能,使用libcurl访问qzone的分享cgi接口,酒店分享信息以POST方式传输,在测试的时候发现分享接口平均有2s的延迟,这延迟也太大了吧,于是乎问了空间 ...
- 发起post请求
string postUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo"; //string req ...
- [Java] 两种发起POST请求方法,并接收返回的响应内容的处理方式
1.利用apache提供的commons-httpclient-3.0.jar包 代码如下: /** * 利用HttpClient发起POST请求,并接收返回的响应内容 * * @param url ...
- android4.0 HttpClient 以后不能在主线程发起网络请求
android4.0以后不能在主线程发起网络请求,该异步网络请求. new Thread(new Runnable() { @Override public void run() { // TODO ...
- php 使用curl发起https请求
今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: erro ...
随机推荐
- 使用input file上传文件中onChange事件只触发一次问题
每次上传文件的时候,都会将当前的文件路径保存至$event.target.value中,当第二次选择文件时,由于两次$event.target.value相同,所以不会触发change事件. 解决方案 ...
- PAT1100:Mars Numbers
1100. Mars Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue People o ...
- idea 和 eclipse 常用快捷键汇总
序号 所属类别 快捷键名称 快键键方式 备注 所属平台 1 查询类 search everywhere double shift idea 2 全文搜索 ctrl + H 通用 3 打开资源 ...
- Oracle-02:SQL语言的分类或者说SQL语言的组成
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 小结一版: 01.DDL(Data Definition Language)数据定义语言. 用来创建数据库中 ...
- 一步一步实现HTTP服务器-开篇
缘起 翻开清单,一条条计划一直列在那里,一天又一天,不知道什么时候写下了它,也知不道什么时候完成它,它一直在那静静的等待着. 静下心来,反思自己,才发现自己是多么的无知,多么的没有毅力.设定了无数目标 ...
- python 3 中的raw_input 报错
raw_input() was renamed to input()
- JavaScript设计模式之----组合模式
javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...
- js定时器让动画隔秒运动
现有一个需求,宝箱隔几秒动一次,抓住用户眼球,自己写了个 doem.
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...
- C# 利用VS自带的WSDL工具生成WebService服务类
C# 利用VS自带的WSDL工具生成WebService服务类 WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲 ...