1.)Nuget安装:

搜索 ConfigLab.Comp, 安装最新版即可.

2.)组包示例.

2.1)模拟post表单提交并包含普通参数和一个图片文件(基于HttpFileUploadAssisterAsync这个核心类).

 private async Task<string> GetPostResultForFile_Async()
{
string sRspResult = "";
IWebProxy eWebProxy = this.getWebProxy();//代理IP的设置
Dictionary<string, string> dictHeader = new Dictionary<string, string>();
string sUserAgent = this.tbxUserAgent.Text.Trim();
dictHeader["Accept-Encoding"] = "gzip, deflate";
dictHeader["Accept-Language"] = "zh-CN,zh;q=0.9";
dictHeader["Upgrade-Insecure-Requests"] = "1";
dictHeader["Cache-Control"] = "max-age=0";
dictHeader["Origin"] = "null";
Dictionary<string, string> dictImg = new Dictionary<string, string>();//待和参数一起提交的文件信息, key=FullFileName, value=Post内容中的参数Name名的字典
if (this.tbxImgUrl.Text.IndexOf(":") > -1 && this.tbxImgName.Text.Trim().Length > 0)
{
dictImg[this.tbxImgUrl.Text] = this.tbxImgName.Text.Trim();
}
else
{
if (this.tbxImgName.Text.Trim().Length > 0)
{
dictImg[""] = this.tbxImgName.Text.Trim();
}
}
if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
{
dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
}
string sFile_ContentType = "image/jpeg";
ResponseResult result = new ResponseResult();
string sUrl = this.tbxUrl.Text.Trim();//输入的请求地址
string sPostData = this.tbxPostData.Text.Trim();//同步提交的文本参数 : u=1&a=2这种格式
string sAccess = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";
//异步模式
HttpFileUploadAssisterAsync htool = new HttpFileUploadAssisterAsync();//关键的类
Task<ResponseResult> tsk_rrs = htool.SendRequest(new RequestParamsWithFile()
{
URL = sUrl,
Method = "POST",
Timeout = 10,
PostData = sPostData,
DictFileName2PostName = dictImg,//可同时传递多个文件
WriteEnc = Encoding.UTF8,
ReaderEnc = GetEncoding(),
WithCookie = this.btnWithCookie.Checked,//是否自动维护cookie
DictRequestHeaderKeyValues = dictHeader,//自定义包头
Accept = sAccess,
UserAgent = sUserAgent,
KeepAlive = true,
EnableExpect100Continue = false,
File_ContentType = sFile_ContentType,//传输的文件类型
WebProxy = eWebProxy//代理IP
});
await tsk_rrs;
ResponseResult rrs_rspData = tsk_rrs.Result;
sRspResult = rrs_rspData.ResponseData;
return sRspResult;
}

2.2)模拟post表单提交并包含普通参数(基于HttpClientAssisterAsync这个核心类).

        private async Task<string>  GetPostResult_Async()
{
IWebProxy eProxy = this.getWebProxy();
HttpClientAssisterAsync htool = new HttpClientAssisterAsync();
Dictionary<string, string> dictHeader = new Dictionary<string, string>();
string sUserAgent = this.tbxUserAgent.Text.Trim();
dictHeader["Content-Type"] = "application/x-www-form-urlencoded";
dictHeader["Accept-Language"] = "zh-cn";
if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
{
dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
}
Task<ResponseResult> tsk_result = htool.SendRequest(new RequestParams() {
URL = this.tbxUrl.Text.Trim(),
Method = "POST",
Timeout = 30, //单位秒
PostData = this.tbxPostData.Text,//表单数据,u=1&p=2这种
WriteEnc = Encoding.UTF8,
ReaderEnc = GetEncoding(),
WithCookie = this.btnWithCookie.Checked,//是否自动管理cookie
DictRequestHeaderKeyValues = dictHeader, //自定义的包头信息
Accept = "*/*",
UserAgent = sUserAgent,
KeepAlive = false,
EnableP3P = false,
AllowRedrect=false,//是否允许自动跳转
EnableExpect100Continue=true,
WebProxy = eProxy //代理IP
});
await tsk_result;
ResponseResult result = tsk_result.Result;
return string.Format("optime={0}\r\nhttpstatucode={1}\r\nerror={2}\r\nresult={3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), result.CurrHttpStatuCode, result.ExceptionMsg, result.ResponseData);
}

2.3)模拟post提交一个json数据并包含普通参数(基于HttpClientAssisterAsync这个核心类).

        private async Task<string> getResultForPostJson_Async()
{
IWebProxy eProxy = this.getWebProxy();
HttpClientAssisterAsync htool = new HttpClientAssisterAsync();
Dictionary<string, string> dictHeader = new Dictionary<string, string>();
string sUserAgent = this.tbxUserAgent.Text.Trim();
dictHeader["Content-Type"] = "application/json;charset=UTF-8";//重点!!!!
dictHeader["Accept-Language"] = "zh-cn";
if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
{
dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
}
Task<ResponseResult> tsk_result = htool.SendRequest(new RequestParams()
{
URL = this.tbxUrl.Text.Trim(),
Method = "POST",
Timeout = 30,
PostData = this.tbxPostData.Text,//Json数据
WriteEnc = Encoding.UTF8,
ReaderEnc = GetEncoding(),
WithCookie = this.btnWithCookie.Checked,//自动管理cookie
DictRequestHeaderKeyValues = dictHeader,//自定义包头
Accept = "*/*",
UserAgent = sUserAgent,
KeepAlive = false,
EnableP3P = false,
AllowRedrect = false,
EnableExpect100Continue = true,
WebProxy = eProxy
});
await tsk_result;
ResponseResult result = tsk_result.Result;
string sResult = string.Format("optime={0}\r\nhttpstatucode={1}\r\nerrors={2}\r\nresult={3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), result.CurrHttpStatuCode, result.ExceptionMsg, result.ResponseData);
return sResult;
}

2.4)模拟get提交一个数据并包含普通参数(基于HttpClientAssisterAsync这个核心类).

 private async Task<string> GetGetResult_Async()
{
IWebProxy eProxy = this.getWebProxy();
HttpClientAssisterAsync htool = new HttpClientAssisterAsync();
Dictionary<string, string> dictHeader = new Dictionary<string, string>();
string sUserAgent = this.tbxUserAgent.Text.Trim();
if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
{
dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
}
Encoding eEncode = this.GetEncoding();
dictHeader["Accept-Language"] = "zh-CN,zh;q=0.8";
dictHeader["Cache-Control"] = "max-age=0";
string sAccess = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
Task<ResponseResult> tsk_rsp = htool.SendRequest(new RequestParams() {
URL=this.tbxUrl.Text,
Method="GET", //在这里设置Get
Timeout=30,
PostData= this.tbxPostData.Text,
WriteEnc=Encoding.Default,
ReaderEnc=eEncode,
WithCookie = this.btnWithCookie.Checked,
DictRequestHeaderKeyValues=dictHeader,
Accept=sAccess,
UserAgent=sUserAgent,
KeepAlive=false,
EnableP3P=false,
AllowRedrect=false,
WebProxy=eProxy
});
await tsk_rsp;
ResponseResult result = tsk_rsp.Result;
return string.Format("optime={0}\r\nhttpstatucode={1}\r\nerror={2}\r\nresult={3}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), result.CurrHttpStatuCode, result.ExceptionMsg, result.ResponseData);
}

分享一个自己封装且一直在维护的依赖.net4.5的http异步组包工具类(支持get,post( 表单 ,json, 包含图片等文件的流提交) ,cookie管理,自动跳转,代理IP,https的支持,高并发的配置等等的更多相关文章

  1. 什么是请求参数、表单参数、url参数、header参数、Cookie参数?一文讲懂

    最近在工作中对 http 的请求参数解析有了进一步的认识,写个小短文记录一下. 回顾下自己的情况,大概就是:有点点网络及编程基础,只需要加深一点点对 HTTP 协议的理解就能弄明白了. 先分享一个小故 ...

  2. 黄聪:Pjax无刷新跳转页面实现,支持超链接与表单提交

    什么是pjax? 当你点击一个站内的链接的时候,不是做页面跳转,而是只是站内页面刷新.这样的用户体验,比起整个页面都闪一下来说, 好很多. 其中有一个很重要的组成部分, 这些网站的ajax刷新是支持浏 ...

  3. Pjax无刷新跳转页面实现,支持超链接与表单提交

    什么是pjax? 当你点击一个站内的链接的时候,不是做页面跳转,而是只是站内页面刷新.这样的用户体验,比起整个页面都闪一下来说, 好很多. 其中有一个很重要的组成部分, 这些网站的ajax刷新是支持浏 ...

  4. 自动爬取代理IP例子

    import time import json import datetime import threading import requests from lxml import etree from ...

  5. 一个表单里,如果有<button>标签存在,它会自动提交表单

    可以用button代替input type=”submit”吗? 在ie下,<button>标记恐怕还存在几个不大不小的问题. 在一个表单里,如果有一个以上"submit&quo ...

  6. 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装

    在asp.net项目中,添加一个[一般处理程序]来处理请求是很自然的事,这样会得到一个实现自IHttpHandler的类,然后只需在ProcessRequest方法中写上处理逻辑就行了.但是这样的一个 ...

  7. 项目经验分享——Java常用工具类集合 转

    http://blog.csdn.net/xyw591238/article/details/51678525 写在前面     本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...

  8. Python网络爬虫之cookie处理、验证码识别、代理ip、基于线程池的数据爬去

    本文概要 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时, ...

  9. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  10. Charles 抓包发现自动跳转为https 问题梳理

    今天遇到个有点意思的问题.特此记录. 业务场景: 做了一个页面,但是对外是挂载在京东主站上.如:www.jd.com/yifu/123456.html. 现场情况: 在本地/测试环境/预发环境中,每次 ...

随机推荐

  1. 一文讲清楚 JVM Safe Point

    大家好,我是树哥. 关于 Safe Point 是 JVM 中很关键的一个概念,但我估计有不少同学不是很懂.于是今天跟大家来深入聊聊 Safe Point,希望通过这篇文章能解答这样几个问题: 什么是 ...

  2. 【Java】 DirectByteBuffer堆外内存回收

    PhantomReference虚引用 在分析堆外内存回收之前,先了解下PhantomReference虚引用. PhantomReference需要与ReferenceQueue引用队列结合使用,在 ...

  3. spring boot项目使用mybatis-plus代码生成实例

    前言 mybatis-plus官方地址 https://baomidou.com mybatis-plus是mybatis的增强,不对mybatis做任何改变,涵盖了代码生成,自定义ID生成器,快速实 ...

  4. 微信小程序专题(二)-----微信openid的获取

    一,简单来讲就是以下流程 通过get方式获取信息 在前端调用wx.login() 获取 临时登录凭证code之后,将code字符串发送给后端,后端通过auth.code2Session接口获取用户唯一 ...

  5. 插入排序算法(Java代码实现)

    其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905 插入排序算法: 思路:将数据分为已经排序好的数据和未排 ...

  6. Springboot+vue 实现汽车租赁系统(毕业设计二)(前后端项目分离)

    文章目录 1.系统功能列表 2.管理员端界面 2.1 商家登录界面 2.2 用户信息管理界面 2.3 汽车管理界面 2.4 订单界面 2.5 汽车图形报表 2.6 优惠券新增界面 3.普通用户界面 3 ...

  7. 2022年最新最详细IDEA关联数据库方式、在IDEA中进行数据库的可视化操作(包含图解过程)

    文章目录 1.使用IDEA关联Mysql数据库的详细操作步骤 1.1 打开侧边栏的Database 2.2. 选择要连接的数据库(Mysql) 2.3 .输入要连接的数据库.用户名.密码 2.4 .点 ...

  8. Unity——第一人称控制器的实现

    Unity--第一人称控制器的实现 一.功能描述 在一个场景中实现人物的前后左右移动和跳跃功能:其中前后左右移动通过W.A.S.D方向键实现,跳跃功能通过空格键实现,并且考虑到重力作用,来调节跳跃功能 ...

  9. k8s之pod连接被拒排查

    k8s之pod连接被拒排查 pod链接被拒 查看pod的时候发现pod的状态为crashloopbackoff 然后看看日志发现报错如下 kubectl -n kf10 logs easydata-r ...

  10. 前后端分离项目(十一):实现"删"功能(前后端)

    好家伙,本篇介绍如何实现"删"功能 来看效果,  数据库 (自然是没什么毛病) "增"搞定了,其实"删"非常简单 (我不会告诉你我是为了水一 ...