前言

在写代码中,我们常常需要去书写代码去请求一些东西,那么是不是可以模拟像web formdata一样请求。

正文

下面代码为模拟的:

public string SendRequest(string url, ref Dictionary<string, object> data, HttpMethod requestMethod,ref Dictionary<string, string> header, int timeOut, string localPath = null, long offset = -1, int sliceSize = 0)
{
//url = "http://localhost:54257/Home/getdata";
try
{
System.Net.ServicePointManager.Expect100Continue = false;
if (requestMethod == HttpMethod.Get)
{
var paramStr = "";
foreach (var key in data.Keys)
{
paramStr += string.Format("{0}={1}&", key, HttpUtility.UrlEncode(data[key].ToString()));
}
paramStr = paramStr.TrimEnd('&');
url += (url.EndsWith("?") ? "&" : "?") + paramStr;
} HttpWebRequest request; request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Accept = CosDefaultValue.ACCEPT;
request.KeepAlive = true;
request.UserAgent = CosDefaultValue.USER_AGENT_VERSION;
request.Timeout = timeOut;
foreach (var key in header.Keys)
{
if(key == "Content-Type")
{
request.ContentType = header[key];
}
else
{
request.Headers.Add(key, header[key]);
}
}
if (requestMethod == HttpMethod.Post)
{
request.Method = requestMethod.ToString().ToUpper();
var memStream = new MemoryStream();
if (header.ContainsKey("Content-Type") && header["Content-Type"] == "application/json")
{
var json = JsonConvert.SerializeObject(data);
var jsonByte = Encoding.GetEncoding("utf-8").GetBytes(json.ToString());
memStream.Write(jsonByte, 0, jsonByte.Length);
}
else
{
var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
var beginBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
var endBoundary = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
request.ContentType = "multipart/form-data; boundary=" + boundary; var strBuf = new StringBuilder();
foreach (var key in data.Keys)
{
strBuf.Append("\r\n--" + boundary + "\r\n");
strBuf.Append("Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n");
strBuf.Append(data[key].ToString());
}
var paramsByte = Encoding.GetEncoding("utf-8").GetBytes(strBuf.ToString());
memStream.Write(paramsByte, 0, paramsByte.Length);
if (localPath != null)
{
memStream.Write(beginBoundary, 0, beginBoundary.Length);
var fileInfo = new FileInfo(localPath);
using (var fileStream = new FileStream(localPath, FileMode.Open, FileAccess.Read))
{
const string filePartHeader =
"Content-Disposition: form-data; name=\"fileContent\"; filename=\"{0}\"\r\n" +
"Content-Type: application/octet-stream\r\n\r\n";
var headerText = string.Format(filePartHeader, fileInfo.Name);
var headerbytes = Encoding.UTF8.GetBytes(headerText);
memStream.Write(headerbytes, 0, headerbytes.Length); if (offset == -1)
{
var buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
}
else
{
var buffer = new byte[sliceSize];
int bytesRead;
fileStream.Seek(offset, SeekOrigin.Begin);
bytesRead = fileStream.Read(buffer, 0, buffer.Length);
memStream.Write(buffer, 0, bytesRead);
}
}
}
memStream.Write(endBoundary, 0, endBoundary.Length);
}
request.ContentLength = memStream.Length;
var requestStream = request.GetRequestStream();
memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close(); requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close(); //Console.WriteLine(strBuf.ToString());
}
//Console.WriteLine(request.ContentType.ToString());
var response = request.GetResponse();
using (var s = response.GetResponseStream())
{
var reader = new StreamReader(s, Encoding.UTF8);
var rsp_data = reader.ReadToEnd();
if (response != null)
{
response.Close();
}
return rsp_data;
}
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.ProtocolError)
{
using (var s = we.Response.GetResponseStream())
{
var reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
else
{
throw we;
}
}
catch (Exception e)
{
throw e;
}
}
}
}

c# 模拟web请求formdata webrequest的更多相关文章

  1. 经验总结20--C#模拟WEB请求

    非常多语言能够使用代码进行WEB请求,获取到须要的数据. 方便调用别人的接口,自己进行处理. HttpWebRequest request = WebRequest.Create(url) as Ht ...

  2. [System.Net]模拟Web请求编写简易单词查询客户端

    demo: 我就不上传了 前言 在实际生活中,网络请求的应用极其常见,比如使用浏览器,程序中我们还要调用webservice.那么浏览器是怎么请求网络资源的呢?不用它可以自己请求不? 答案是可以的. ...

  3. C#模拟httpwebrequest请求_向服务器模拟cookie发送

    使用C#代码模拟web请求,是一种常用的方法,以前没专门整理过,这里暂时贴上自己整理的完整代码,以后再做梳理: public class MyRequest { #region 辅助方法 public ...

  4. js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq

    js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...

  5. 模拟HTTP请求:Request Maker

    摘要 : Request Maker是一款可以模拟HTTP请求的谷歌浏览器插件. Request Maker的开发背景 现在由于restful式的web api的兴起,越来越多的开发者习惯使用URL来 ...

  6. 第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求

    第三百二十七节,web爬虫讲解2—urllib库爬虫 利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码read()读出html源码内容decode(& ...

  7. 六 web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求

    利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码read()读出html源码内容decode("utf-8")将字节转化成字符串 ...

  8. 模拟web服务器http请求应答

    我们在浏览器打开网页,其实是向远端服务器提出页面发送请求,远端服务器在接到请求后,就开始执行请求页面的程序文件,然后将执行结果通过html格式,发送到你的浏览器,再显示出来.以下用百度(www.bai ...

  9. 007-优化web请求三-异步调用【WebAsyncTask】

    一.什么是同步调用 浏览器发起请求,Web服务器开一个线程处理,处理完把处理结果返回浏览器.好像没什么好说的了,绝大多数Web服务器都如此般处理.现在想想如果处理的过程中需要调用后端的一个业务逻辑服务 ...

  10. C# 通过模拟http请求来调用soap、wsdl

    C#调用webservice的方法很多,我说的这种通过http请求模拟来调用的方式是为了解决C#调用java的远程API出现各种不兼容问题. 由于远程API不在我们的控制下,我们只能修改本地的调用代码 ...

随机推荐

  1. XSS漏洞原理整理

    一.通常使用XSS脚本来获取浏览器版本信息,alert(navigator.userAgnet )  ,浏览器的UserAgent是可以伪造的,比方火狐或者很多扩展都可以屏蔽或者自定义浏览器发送的Us ...

  2. JVM(一)-内存结构

    我们都知道,我们写的Java程序需要先经过编译,生成了.class文件(字节码文件).然而,计算机并不能直接解释.class文件里面的内容,这时候就需要一个能加载.解释.class文件并且能按.cla ...

  3. k8s通过help、dry-run、explain提高编写yaml效率

    在Kubernetes(k8s)环境中,help.dry-run和explain命令可以帮助你提高编写YAML文件的效率.这些命令提供了关于资源定义.命令用法和字段说明的信息,从而让你能够更快速.更准 ...

  4. c语言中int和char之间的转换实例解析

    壹:     经常用到c,积累一些小函数,免得下次还要重新写,极大的提升工作效率啊. 贰:    代码很简单,直接上源码: #include <stdio.h> typedef unsig ...

  5. eclipse插件FindBugs使用笔记

    FindBugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.Findbugs自带检测器,其中有60余种Bad practice,80余种Correct ...

  6. P2602 [ZJOI2010] 数字计数:数位DP

    https://www.luogu.com.cn/problem/P2602 // #include <iostream> // #include <iomanip> // # ...

  7. 恶意软件开发(五)Linux shellcoding

    什么是shellcode? Shellcode通常指的是一段用于攻击的机器码(二进制代码),可以被注入到目标计算机中并在其中执行.Shellcode 的目的是利用目标系统的漏洞或弱点,以获取系统控制权 ...

  8. 自己动手做一个批量doc转换为docx文件的小工具

    前言 最近遇到了一个需求,就是要把大量的doc格式文件转换为docx文件,因此就动手做了一个批量转换的小工具. 背景 doc文件是什么? "doc" 文件是一种常见的文件格式,通常 ...

  9. 新零售SaaS架构:线上商城系统架构设计

    零售商家为什么要建设线上商城? 传统的实体门店服务范围有限,只能吸引周边500米以内的消费者.因此,如何拓展服务范围,吸引更多的消费者到店,成为了店家迫切需要解决的问题. 缺乏忠实顾客,客户基础不稳, ...

  10. 记录--源码视角,Vue3为什么推荐使用ref而不是reactive

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 ref 和 reactive 是 Vue3 中实现响应式数据的核心 API.ref 用于包装基本数据类型,而 reactive 用于处理对 ...