首页 > 编程语言 >C# Post 模拟表单提交

C# Post 模拟表单提交

时间:2023-10-28 17:11:21浏览次数:32  
标签:string Encoding C# request 表单 -- GetBytes Post boundary

        /// <summary>
        /// 向指定的URL地址发起一个POST请求。
        /// </summary>
        /// <param name="url">要请求的URL地址</param>
        /// <param name="keyvalues">要上传的数据项</param>
        /// <returns>服务器的返回结果</returns>
        public static string FormdataPost(string url, Dictionary<string, string> keyvalues, string Authorization)
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
 
            if (string.IsNullOrEmpty(url))
                throw new ArgumentNullException("url");
 
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.KeepAlive = true;
            request.Headers.Add("Authorization", Authorization);//token
 
            string boundary = "---------------------------" + Guid.NewGuid().ToString("N");
 
            byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
 
 
            request.ContentType = "multipart/form-data; boundary=" + boundary;
 
 
            Stream stream = request.GetRequestStream();
 
            byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");
            byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
 
            //写入参数
            if (keyvalues != null)
            {
                string formDataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n" +
                       "{1}\r\n";
 
                foreach (string key in keyvalues.Keys)
                {
                    string formItem = string.Format(formDataTemplate, key, keyvalues[key]);
                    byte[] formItemBytes = Encoding.UTF8.GetBytes(formItem);
 
                    stream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length); // 1.1 写入FormData项的开始边界符
                    stream.Write(formItemBytes, 0, formItemBytes.Length);   // 1.2 将键值对写入FormData项中
                }
            }
 
            boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
            stream.Write(boundaryBytes, 0, boundaryBytes.Length);
 
            stream.Close();
 
            using (WebResponse response = request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    return reader.ReadToEnd();
                }
            }
        }

  可以用

原帖地址:https://blog.csdn.net/u012925792/article/details/131909693

标签:string,Encoding,C#,request,表单,--,GetBytes,Post,boundary
From: https://www.cnblogs.com/xuezhu/p/17794308.html

相关文章

  • 使用pandas,Missing optional dependency 'xlrd'. Install xlrd >= 2.0.1 for xls Exce
    遇到问题使用pandas处理excel数据,报错:ImportError:Missingoptionaldependency'xlrd'.Installxlrd>=2.0.1forxlsExcelsupportUsepiporcondatoinstallxlrd.解决方案是xlrd版本不匹配,手动安装xlrd......
  • vue中使用axios请求post接口为什么先发起OPTIONS请求再发起post请求?
    在使用Axios进行跨域POST请求时,浏览器会先发起一个OPTIONS请求,这是因为浏览器执行了跨域请求时的预检请求(PreflightRequest)。这是一个安全性措施,旨在确保跨域请求不会导致安全风险。1、跨域请求的安全性:当前端应用和后端API位于不同的域或端口时,浏览器会执行同源策略,以防止跨站点......
  • 这是我在51CTO博客的第一篇博文Loki 实现 Kubernetes1.24 容器日志监控
    使用Loki实现Kubernetes1.24容器日志监控一、基本介绍1.Loki架构2.Loki工作原理二、使用Loki实现容器日志监控1.安装Loki2.安装Promtail3.安装Grafana4.验证一、基本介绍Loki是由GrafanaLabs团队开发的,基于Go语言实现,是一个水平可扩展,高可用性,多租户的日志聚合系......
  • 无涯教程-Clojure - meta-with函数
    此函数用于定义任何对象的元数据映射。meta-with-语法(with-metaobjmapentry)参数   - 'obj'是需要与元数据关联的对象,"mapentry"是需要与对象相关联的元数据。返回值 - 返回与obj具有相同类型和值的对象,并以mapentry作为其元数据。meta-with-示例(nscl......
  • c语言学习的第三天
    intmain()//{// externintg_val;// printf("g_val=%d\n",g_val);//extern--申明外部符号+// return0;//static修饰全局变量改变了变量的作用域,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没法在使用了//static修饰函数改变了函数的链接属性 //st......
  • 无涯教程-Clojure - meta函数
    此函数用于查看是否有任何元数据与对象相关联。meta-语法(metaobj)参数   - 'obj'是要检查是否有任何元数据与之关联的对象。返回值 - 返回obj的元数据,如果没有元数据,则返回nil。meta-示例(nsclojure.examples.example(:gen-class))(defnExample[......
  • 基于高性能Cortex®-M7内核STM32F765VGT7、STM32F745IET6嵌入式微控制器
    STM32F732位MCU+FPU基于高性能的ARM®Cortex-M732位RISC内核®,工作频率高达216MHz。Cortex®-M7内核具有单浮点单元(SFPU)精度,支持所有ARM®单精度数据处理指令与数据类型。同时执行全套DSP指令和存储保护单元(MPU),增强应用安全性。1、STM32F765VGT7ICMCU32BIT1MB......
  • CSP2023 总结
    CSP2023总结前言这次CSP2023并没有考出水平。经过深刻反思,我总结了个人目前存在的一些问题与改进的方案。上午CSP-J开始后,手忙脚乱地建好了目录文件、配置好了DEV-C++的语法环境、切换好了ENG输入法。T1看到T1发现不如去年简单,有些慌张。努力冷静下来后,推了一下,......
  • Traceback (most recent call last):
    Traceback(mostrecentcalllast):File"C:\Users\17482\Desktop\yiyan_plugin_demo\yiyan_plugin_demo\demo_server.py",line4,in<module>fromflaskimportFlask,request,send_file,make_responseModuleNotFoundError:Nomodulenamed......
  • CF1612
    ADistance直接枚举C点x坐标暴力判断#include<bits/stdc++.h>usingnamespacestd;intxa,ya,xb,yb;signedmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); intt; cin>>t; while(t--){ cin>>xb>>yb; inttot=xb+yb; if(tot%......