1.)Nuget安装:

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

2.)组包示例.

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

  1. private async Task<string> GetPostResultForFile_Async()
  2. {
  3. string sRspResult = "";
  4. IWebProxy eWebProxy = this.getWebProxy();//代理IP的设置
  5. Dictionary<string, string> dictHeader = new Dictionary<string, string>();
  6. string sUserAgent = this.tbxUserAgent.Text.Trim();
  7. dictHeader["Accept-Encoding"] = "gzip, deflate";
  8. dictHeader["Accept-Language"] = "zh-CN,zh;q=0.9";
  9. dictHeader["Upgrade-Insecure-Requests"] = "1";
  10. dictHeader["Cache-Control"] = "max-age=0";
  11. dictHeader["Origin"] = "null";
  12. Dictionary<string, string> dictImg = new Dictionary<string, string>();//待和参数一起提交的文件信息, key=FullFileName, value=Post内容中的参数Name名的字典
  13. if (this.tbxImgUrl.Text.IndexOf(":") > -1 && this.tbxImgName.Text.Trim().Length > 0)
  14. {
  15. dictImg[this.tbxImgUrl.Text] = this.tbxImgName.Text.Trim();
  16. }
  17. else
  18. {
  19. if (this.tbxImgName.Text.Trim().Length > 0)
  20. {
  21. dictImg[""] = this.tbxImgName.Text.Trim();
  22. }
  23. }
  24. if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
  25. {
  26. dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
  27. }
  28. string sFile_ContentType = "image/jpeg";
  29. ResponseResult result = new ResponseResult();
  30. string sUrl = this.tbxUrl.Text.Trim();//输入的请求地址
  31. string sPostData = this.tbxPostData.Text.Trim();//同步提交的文本参数 : u=1&a=2这种格式
  32. string sAccess = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";
  33. //异步模式
  34. HttpFileUploadAssisterAsync htool = new HttpFileUploadAssisterAsync();//关键的类
  35. Task<ResponseResult> tsk_rrs = htool.SendRequest(new RequestParamsWithFile()
  36. {
  37. URL = sUrl,
  38. Method = "POST",
  39. Timeout = 10,
  40. PostData = sPostData,
  41. DictFileName2PostName = dictImg,//可同时传递多个文件
  42. WriteEnc = Encoding.UTF8,
  43. ReaderEnc = GetEncoding(),
  44. WithCookie = this.btnWithCookie.Checked,//是否自动维护cookie
  45. DictRequestHeaderKeyValues = dictHeader,//自定义包头
  46. Accept = sAccess,
  47. UserAgent = sUserAgent,
  48. KeepAlive = true,
  49. EnableExpect100Continue = false,
  50. File_ContentType = sFile_ContentType,//传输的文件类型
  51. WebProxy = eWebProxy//代理IP
  52. });
  53. await tsk_rrs;
  54. ResponseResult rrs_rspData = tsk_rrs.Result;
  55. sRspResult = rrs_rspData.ResponseData;
  56. return sRspResult;
  57. }

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

  1. private async Task<string> GetPostResult_Async()
  2. {
  3. IWebProxy eProxy = this.getWebProxy();
  4. HttpClientAssisterAsync htool = new HttpClientAssisterAsync();
  5. Dictionary<string, string> dictHeader = new Dictionary<string, string>();
  6. string sUserAgent = this.tbxUserAgent.Text.Trim();
  7. dictHeader["Content-Type"] = "application/x-www-form-urlencoded";
  8. dictHeader["Accept-Language"] = "zh-cn";
  9. if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
  10. {
  11. dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
  12. }
  13. Task<ResponseResult> tsk_result = htool.SendRequest(new RequestParams() {
  14. URL = this.tbxUrl.Text.Trim(),
  15. Method = "POST",
  16. Timeout = 30, //单位秒
  17. PostData = this.tbxPostData.Text,//表单数据,u=1&p=2这种
  18. WriteEnc = Encoding.UTF8,
  19. ReaderEnc = GetEncoding(),
  20. WithCookie = this.btnWithCookie.Checked,//是否自动管理cookie
  21. DictRequestHeaderKeyValues = dictHeader, //自定义的包头信息
  22. Accept = "*/*",
  23. UserAgent = sUserAgent,
  24. KeepAlive = false,
  25. EnableP3P = false,
  26. AllowRedrect=false,//是否允许自动跳转
  27. EnableExpect100Continue=true,
  28. WebProxy = eProxy //代理IP
  29. });
  30. await tsk_result;
  31. ResponseResult result = tsk_result.Result;
  32. 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);
  33. }

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

  1. private async Task<string> getResultForPostJson_Async()
  2. {
  3. IWebProxy eProxy = this.getWebProxy();
  4. HttpClientAssisterAsync htool = new HttpClientAssisterAsync();
  5. Dictionary<string, string> dictHeader = new Dictionary<string, string>();
  6. string sUserAgent = this.tbxUserAgent.Text.Trim();
  7. dictHeader["Content-Type"] = "application/json;charset=UTF-8";//重点!!!!
  8. dictHeader["Accept-Language"] = "zh-cn";
  9. if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
  10. {
  11. dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
  12. }
  13. Task<ResponseResult> tsk_result = htool.SendRequest(new RequestParams()
  14. {
  15. URL = this.tbxUrl.Text.Trim(),
  16. Method = "POST",
  17. Timeout = 30,
  18. PostData = this.tbxPostData.Text,//Json数据
  19. WriteEnc = Encoding.UTF8,
  20. ReaderEnc = GetEncoding(),
  21. WithCookie = this.btnWithCookie.Checked,//自动管理cookie
  22. DictRequestHeaderKeyValues = dictHeader,//自定义包头
    Accept = "*/*",
  23. UserAgent = sUserAgent,
  24. KeepAlive = false,
  25. EnableP3P = false,
  26. AllowRedrect = false,
  27. EnableExpect100Continue = true,
  28. WebProxy = eProxy
  29. });
  30. await tsk_result;
  31. ResponseResult result = tsk_result.Result;
  32. 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);
  33. return sResult;
  34. }

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

  1. private async Task<string> GetGetResult_Async()
  2. {
  3. IWebProxy eProxy = this.getWebProxy();
  4. HttpClientAssisterAsync htool = new HttpClientAssisterAsync();
  5. Dictionary<string, string> dictHeader = new Dictionary<string, string>();
  6. string sUserAgent = this.tbxUserAgent.Text.Trim();
  7. if (!string.IsNullOrEmpty(this.tbx_Hedaer_Key.Text) && !string.IsNullOrEmpty(this.tbx_Hedaer_Value.Text))
  8. {
  9. dictHeader[this.tbx_Hedaer_Key.Text.Trim()] = this.tbx_Hedaer_Value.Text.Trim();
  10. }
  11. Encoding eEncode = this.GetEncoding();
  12. dictHeader["Accept-Language"] = "zh-CN,zh;q=0.8";
  13. dictHeader["Cache-Control"] = "max-age=0";
  14. string sAccess = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
  15. Task<ResponseResult> tsk_rsp = htool.SendRequest(new RequestParams() {
  16. URL=this.tbxUrl.Text,
  17. Method="GET", //在这里设置Get
  18. Timeout=30,
  19. PostData= this.tbxPostData.Text,
  20. WriteEnc=Encoding.Default,
  21. ReaderEnc=eEncode,
  22. WithCookie = this.btnWithCookie.Checked,
  23. DictRequestHeaderKeyValues=dictHeader,
  24. Accept=sAccess,
  25. UserAgent=sUserAgent,
  26. KeepAlive=false,
  27. EnableP3P=false,
  28. AllowRedrect=false,
  29. WebProxy=eProxy
  30. });
  31. await tsk_rsp;
  32. ResponseResult result = tsk_rsp.Result;
  33. 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);
  34. }

分享一个自己封装且一直在维护的依赖.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. 自主创建mybtis管理应用,用以横向管理数据源

    这个是我写的第一个随手小记,一晃眼做后端开发也有7年多了,现在也准备将一些杂七杂八的资料整理下.也算是回顾这7年中做的比较有意思的东西了. 这个需求是我17年做的,当时的应用场景是仓储库比较多,随时会 ...

  2. 2021东华杯misc project

    ​ project 题目附件发现是工程文件,按日期排序只有一个新的exe文件,那考点肯定就在这了 ​编辑 运行exe生成了一个zip ​编辑 打开解压缩的文件发现有三部分编码 base64 quote ...

  3. Vue学习之--------计算属性(2022/7/9)

    文章目录 1.计算属性 1.1 计算属性实现 1.1.1 基础知识 1.1.2 代码实例 1.1.3 测试效果 1.2 计算属性简写 1.2.1 简写代码 1.3 使用插值语法实现 1.3.1 代码实 ...

  4. 齐博x1频道的二次开发入门讲解

    要进行频道的二次开发,首先我们要先了解一下频道的目录结构,如下图最基本的几个目录admin 后台文件存放目录index 前台文件存放目录member 会员中心存放目录model 数据表模型目录trai ...

  5. 畸变矫正、透视变换加速(OpenCV C++)

    前两周,同事和我说检测时间超时,其中对图像做畸变矫正和投影变换就要花费25ms(3000×3000的图).而此时我们已经用上了文章opencv图像畸变矫正加速.透视变换加速方法总结中的方法.突然我想到 ...

  6. 从源码入手探究一个因useImperativeHandle引起的Bug

    今天本来正在工位上写着一段很普通的业务代码,将其简化后大致如下: function App(props: any) { // 父组件 const subRef = useRef<any>( ...

  7. python3使用libpcap库进行抓包及数据处理

    python版本:python 3.9 libpcap版本:1.11.0b7 python libpcap库是底层绑定c语言libpcap库的开发包,旨在提供python应用可访问的unix c li ...

  8. ahk_more

    ;20:47 2022/5/8 #NoEnv #Warn #SingleInstance Force ;设工作目录为桌面 SetWorkingDir %A_Desktop% ;托盘提示必须放在热键前面 ...

  9. 中小型企业综合项目(Nginx+LVS+Tomcat+MGR+Nexus+NFS)

    Nginx+Tomcat+Mysql综合实验 1.环境准备 服务器 IP地址 作用 系统版本 数据库服务器1 192.168.100.111 MGR集群数据库master节点 Rocky8.6 数据库 ...

  10. 【深入浅出 Yarn 架构与实现】1-1 设计理念与基本架构

    一.Yarn 产生的背景 Hadoop2 之前是由 HDFS 和 MR 组成的,HDFS 负责存储,MR 负责计算. 一)MRv1 的问题 耦合度高:MR 中的 jobTracker 同时负责资源管理 ...