c# Post请求实例

2023-05-16

server

//服务器
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
//using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using DataBase;

namespace WebServer
{
    //异步非阻塞
    //服务器
    class Program
    {
        private static int count = 0;
        static HttpListener httpobj;
        static void Main(string[] args)
        {
            //提供一个简单的、可通过编程方式控制的 HTTP 协议侦听器。此类不能被继承。
            httpobj = new HttpListener();
            //定义url及端口号,通常设置为配置文件
            httpobj.Prefixes.Add("http://127.0.0.1:8080/myJson/");
            //启动监听器
            httpobj.Start();
            //异步监听客户端请求,当客户端的网络请求到来时会自动执行Result委托
            //该委托没有返回值,有一个IAsyncResult接口的参数,可通过该参数获取context对象
            httpobj.BeginGetContext(Result, null);
            Console.WriteLine($"服务端初始化完毕,正在等待客户端请求,时间:{DateTime.Now.ToString()}\r\n");
            Console.ReadKey();
        }


        private static void Result(IAsyncResult ar)
        {
            //当接收到请求后程序流会走到这里

            //继续异步监听
            httpobj.BeginGetContext(Result, null);
            var guid = Guid.NewGuid().ToString();
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine($"接到第{++count}个请求:{guid},时间:{DateTime.Now.ToString()}");
            //获得context对象
            var context = httpobj.EndGetContext(ar);
            var request = context.Request;
            var response = context.Response;
            //如果是js的ajax请求,还可以设置跨域的ip地址与参数
            //context.Response.AppendHeader("Access-Control-Allow-Origin", "*");//后台跨域请求,通常设置为配置文件
            //context.Response.AppendHeader("Access-Control-Allow-Headers", "ID,PW");//后台跨域参数设置,通常设置为配置文件
            //context.Response.AppendHeader("Access-Control-Allow-Method", "post");//后台跨域请求设置,通常设置为配置文件
            context.Response.ContentType = "text/plain;charset=UTF-8";//告诉客户端返回的ContentType类型为纯文本格式,编码为UTF-8
            context.Response.AddHeader("Content-type", "text/plain");//添加响应头信息
            context.Response.ContentEncoding = Encoding.UTF8;
            string returnObj = null;//定义返回客户端的信息
            if (/*request.HttpMethod == "POST" &&*/ request.InputStream != null)
            {
                //处理客户端发送的请求并返回处理信息
                returnObj = HandleRequest(request, response);
            }
            else
            {
                returnObj = $"不是post请求或者传过来的数据为空";
            }

            var returnByteArr = Encoding.UTF8.GetBytes(returnObj);//设置客户端返回信息的编码
                                                                  //var returnJson = Encoding.UTF8.GetBytes(GetJsonFile("../../../BerthEdges.json"));//设置客户端返回信息的编码

            #region 编辑需要返回的信息
            //编辑返回信息
            ReturnData returnData = new ReturnData();

            LevelPosInfo levelPosInfo = new LevelPosInfo();
            levelPosInfo.LevelInfo = 1;
            levelPosInfo.hight = 50;
            Vector3 v1 = new Vector3(100,300,0);
            levelPosInfo.posInfos.Add(v1);
            returnData.LevelPosInfos.Add(levelPosInfo);

            #endregion

            //levelPosInfo.posInfos.add(posInfo);

            var returnJson = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(returnData));//设置客户端返回信息的编码

            try
            {
                using (var stream = response.OutputStream)
                {
                    //把处理信息返回到客户端
                    stream.Write(returnJson, 0, returnJson.Length);
                    //stream.Write(returnByteArr, 0, returnByteArr.Length);
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"网络蹦了:{ex.ToString()}");
            }
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine($"请求处理完成:{guid},时间:{DateTime.Now.ToString()}\r\n");
        }

        private static string HandleRequest(HttpListenerRequest request, HttpListenerResponse response)
        {
            string data = null;
            try
            {
                var byteList = new List<byte>();
                var byteArr = new byte[2048];
                int readLen = 0;
                int len = 0;
                //接收客户端传过来的数据并转成字符串类型
                do
                {
                    readLen = request.InputStream.Read(byteArr, 0, byteArr.Length);
                    len += readLen;
                    byteList.AddRange(byteArr);

                } while (readLen != 0);
                data = Encoding.UTF8.GetString(byteList.ToArray(), 0, len);
                Console.WriteLine($"收到数据:{data}");
                //获取得到数据data可以进行其他操作
              

            }
            catch (Exception ex)
            {
                response.StatusDescription = "404";
                response.StatusCode = 404;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine($"在接收数据时发生错误:{ex.ToString()}");
                return $"在接收数据时发生错误:{ex.ToString()}";//把服务端错误信息直接返回可能会导致信息不安全,此处仅供参考
            }
            response.StatusDescription = "200";//获取或设置返回给客户端的 HTTP 状态代码的文本说明。
            response.StatusCode = 200;// 获取或设置返回给客户端的 HTTP 状态代码。
            Console.ForegroundColor = ConsoleColor.Green;
            var a = request.QueryString["id"];//获取客户端发送过来的参数
            Console.WriteLine($"客户端通过{request.HttpMethod}方式发来的数据:{data},参数:{request.QueryString["id"]}时间:{DateTime.Now.ToString()}");
                   

            return $"接收数据完成";
        }

        //读取json文件
        public static string GetJsonFile(string jsonfile)
        {
            string jsonstr = "";
            using (System.IO.StreamReader file = System.IO.File.OpenText(jsonfile))
            {
                using (JsonTextReader reader = new JsonTextReader(file))
                {
                    JObject o = (JObject)JToken.ReadFrom(reader);
                    jsonstr = o.ToString(Formatting.None);//格式化输出Json用Formatting.Indented
                }
            }
            return jsonstr;
        }
    }

     //同步阻塞
     //class Program
     //{
     //    delegate int GuangChaoshi(int a);
     //    static void Main(string[] args)
     //    {

//        string ss2 = GetJsonFile("../../../BerthEdges.json");
//        HttpListener httpListener = new HttpListener();
//        if (!HttpListener.IsSupported)
//        {
//            throw new System.InvalidOperationException(
//                "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
//        }
//        httpListener.Prefixes.Add("http://127.0.0.1/TiKuSync/");//
//        httpListener.Start();
//        Console.WriteLine("监听中...");
//        try
//        {
//            ThreadPool.SetMinThreads(8, 5);
//            ThreadPool.SetMaxThreads(100, 30);
//            while (true)
//            {
//                try
//                {
//                    HttpListenerContext context = httpListener.GetContext();//相当于accept() ,同步阻塞
//                    ThreadPool.QueueUserWorkItem((o) => { Handler(context); });
//                    if (Console.KeyAvailable)
//                        break;
//                }
//                catch (HttpListenerException exception)
//                {
//                    Console.WriteLine(exception.Message);
//                    break;
//                }
//                catch (InvalidOperationException exception)
//                {
//                    Console.WriteLine(exception.Message);
//                    break;
//                }
//            }
//        }
//        catch (Exception ex)
//        {
//            //if (httpListener.IsListening) { httpListener.Stop(); }
//            Console.WriteLine(ex.Message);
//        }
//        Console.ReadLine();

//    }

//    private static int Counter = 0;
//    private static void Handler(HttpListenerContext context)
//    {
//        try
//        {
//            Counter++;
//            ///请求对象
//            HttpListenerRequest request = context.Request;
//            Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl);
//            Console.WriteLine("Accept: {0}", string.Join(",", request.AcceptTypes));
//            Console.WriteLine("Accept-Language: {0}",
//                string.Join(",", request.UserLanguages));
//            Console.WriteLine("User-Agent: {0}", request.UserAgent);
//            Console.WriteLine("Accept-Encoding: {0}", request.Headers["Accept-Encoding"]);
//            Console.WriteLine("Connection: {0}",
//                request.KeepAlive ? "Keep-Alive" : "close");
//            Console.WriteLine("Host: {0}", request.UserHostName);
//            Console.WriteLine("Pragma: {0}", request.Headers["Pragma"]);

//            ///回应对象
//            HttpListenerResponse response = context.Response;
//            string responseString = "<html><head><meta http-equiv=Content-Type content=\"text/html;charset=utf-8\"></head><body>This is HttpListener Service!请求: " + Counter + "</body></html>";
//            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
//            response.ContentEncoding = Encoding.UTF8;
//            response.ContentLength64 = buffer.Length;
//            response.ContentType = "text/html; charset=UTF-8";
//            response.KeepAlive = true;
//            using (Stream output = response.OutputStream)
//            {
//                //output.Write(buffer, 0, buffer.Length);
//                //output.Flush();
//                System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
//                writer.Write(responseString);
//                // 必须关闭输出流
//                writer.Close();

//            }
//            response.Close();
//        }
//        catch (Exception exception)
//        {
//            Console.WriteLine(exception.Message);
//        }
//        finally
//        {
//            Console.WriteLine("请求次数:{0}", Counter);
//        }
//    }

//    //读取json文件
//    public static string GetJsonFile(string jsonfile)
//    {
//        string jsonstr = "";
//        using (System.IO.StreamReader file = System.IO.File.OpenText(jsonfile))
//        {
//            using (JsonTextReader reader = new JsonTextReader(file))
//            {
//                JObject o = (JObject)JToken.ReadFrom(reader);
//                jsonstr = o.ToString();
//            }
//        }
//        return jsonstr;
//    }
}


client

using Newtonsoft.Json;
using DataBase;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
//using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace Client
{//客户端
    class Program
    {
        static void Main(string[] args)
        {
            string operation;
            do
            {
                Console.WriteLine("按任意键请求连接发送数据到服务端");
                string flag = Console.ReadLine();
                //var wc = new System.Net.WebClient();
                var url = "http://127.0.0.1:8080/myJson?id=100";
                Console.WriteLine($"请求服务地址:{url},时间:{DateTime.Now.ToString()}");
                //模拟一个json数据发送到服务端
                Data data = new Data();
                var jsonModel = JsonConvert.SerializeObject(data);
                
                Post(url, jsonModel);
                
                //jsonModel = "发一个json文件";
                //发送到服务端并获得返回值

                //wc.UploadData(url, Encoding.UTF8.GetBytes(jsonModel));//post
                //var returnInfo = wc.DownloadData(url); //get
                把服务端返回的信息转成字符串
                //var str = Encoding.UTF8.GetString(returnInfo);
                //Console.ForegroundColor = ConsoleColor.Cyan;
                //Console.WriteLine($"服务端返回信息:{str},时间:{DateTime.Now.ToString()}");
                //Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine($"请问是否继续:继续 【y】,退出【n】");
                operation = Console.ReadLine();
            } while (operation == "y");
        }
        
        public static string Post(string Url, string jsonParas)
        {
            string strURL = Url;
            //创建一个HTTP请求  
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
            //Post请求方式  
            request.Method = "POST";
            //内容类型
            request.ContentType = "application/x-www-form-urlencoded";

            //设置参数,并进行URL编码 

            string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas);   

            byte[] payload;
            //将Json字符串转化为字节  
            payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
            //设置请求的ContentLength   
            request.ContentLength = payload.Length;
            //发送请求,获得请求流 

            Stream writer;
            try
            {
                writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
            }
            catch (Exception)
            {
                writer = null;
                Console.Write("连接服务器失败!");
            }
            //将请求参数写入流
            writer.Write(payload, 0, payload.Length);
            writer.Close();//关闭请求流
                           // String strValue = "";//strValue为http响应所返回的字符流
            HttpWebResponse response;
            try
            {
                //获得响应流
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                response = ex.Response as HttpWebResponse;
            }
            Stream s = response.GetResponseStream();
            //  Stream postData = Request.InputStream;
            StreamReader sRead = new StreamReader(s);
            string postContent = sRead.ReadToEnd();
            sRead.Close();
            Console.ForegroundColor = ConsoleColor.Cyan;
            Console.WriteLine($"服务端返回信息:{postContent},时间:{DateTime.Now.ToString()}");
            

            return postContent;//返回Json数据
        }
    }
}



class Data
{
	public string Name;
    public int years;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# Post请求实例 的相关文章

  • POST 请求(Javascript)

    如何在 Javascript 中发出简单的 POST 请求而不使用表单且不回发 虽然我从 sundeep 答案中获取代码示例 但为了完整性而将代码发布在此处 var url sample url php var params lorem i
  • 使用 Volley android 将发布数据发送到服务器

    我正在尝试使用 Volley 库向服务器发送一些数据 private void registerUser final String email final String username final String password Tag
  • $_POST、$_GET 和 $_REQUEST 为空

    SOLVED 我省略了输入字段中的名称属性 我有一个简单的 html php 表单 我提交了 POST 始终为空 如果我尝试 get 那么 GET 总是空的 REQUEST 和 php input 相同 我没有得到任何回报 有很多关于这个主
  • PHP 避免浏览器在页面刷新时重新发布 $_POST?

    我想知道我可以使用哪些技术来避免用户在刷新页面并再次选择提交时两次发布表单 例如我里面有表格注册 php并在内部处理它注册 php 1st我可以在另一个文件中处理 例如注册进程 php并重定向到 register php 但随后我必须创建大
  • Jquery:按下输入类型=提交时防止重新加载页面

    我在 MVC 3 Razor 项目中有以下代码 div class user info div
  • Android Volley POST Json 到服务器

    我正在使用 Volley 在 Android 设备和网络服务器之间传输数据 我发现有关将数据列表发送到服务器的问题 例如 我的类将生成如下数据集 1 1 aID 5 2 aID 5 3 aID 5 4 aID 5 2 1 bID 3 2 b
  • 使用 Nodejs 和 body-parser 发布表单数据

    我现在已经进行了几次不同的在线尝试 但我的帖子数据一直未定义 并且 console log JSON stringify req body 也没有返回任何内容 所以我在某个地方出错了 HTML
  • 如何根据请求打开多个浏览器窗口? (PHP)

    所以我有一个表格PHP HTML页 用户将其提交给同一PHP HTML页 现在我将拥有 PHP 页面 POST数据 我想在刷新页面时选择一些弹出浏览器窗口 其中 url 将相对于用户POST要求 喜欢www example com bal
  • Cakephp 验证后,所有表单字段都为空,并出现表单错误

    我有问题 我尝试填写表单 然后单击提交按钮 然后它显示表单错误 但所有文本框字段都变为空白 并且可以显示表单错误 我希望它变得与验证之前相同的值 就像我不想在验证后清除 清空值一样 我做了这样的事情 在视图中 div class regfo
  • Laravel 输入:get() 不起作用

    我正在尝试在 Laravel 4 中使用 post 函数 我的表单有许多字段 在提交时 会转到控制器中的 post 函数 问题是 表单中的字段名称之间有空格 例如 Type 1 是输入的名称 中间有一个空格 现在 当我尝试通过执行以下操作来
  • 如何在 http POST 请求中发送 HTML 代码?

    我正在从 Google Web Toolkit 应用程序向 php 脚本发送 HTTP POST 请求 内容类型现在是 application x www form urlencoded 所以我可以将变量发送到 php 并使用 POST 在
  • 将数据从 jQuery 传递到 PHP 以进行 ajax post

    你好 我是一个使用 jQuery 和 Ajax 的新手 我正在尝试使用 Jquery POST 方法将数据提交到服务器 我传递的数据是一个字符串 现在我无法理解如何传递数据以及如何检索数据 我尝试搜索有关我的问题的文章 但没有找到 我相信我
  • Python请求响应以utf-8编码但无法解码

    我正在尝试使用 python 抓取我的messenger com facebook Messenger 聊天记录 并且我使用谷歌浏览器开发工具来查看聊天历史记录的 POST 请求 并且我已将整个标头和正文复制为请求可以使用的格式 我得到 H
  • 通过 facebook api 在 facebook feed 中发布 swf

    我正在使用下面的数组 feeddata array type gt flash method gt stream publish display gt iframe link gt https developers facebook com
  • iOS 安全性将带有密码的数据发送至服务器或从服务器发送数据

    我正在构建一个应用程序 需要在服务器执行任何操作之前从用户设备发送密码以在服务器上进行身份验证 事情是这样的 用户的手机上有一个纯文本密码 该密码也在服务器中以 bcrypt 二进制文件的形式存在 用户想要从数据库中获取某些内容 因此用户通
  • jquery ajax 发送到 MVC 控制器时不断收到 400(错误请求)

    我的 ajax 调用看起来像这样 ajax actually approve or reject the promotion url url type POST data data PromotionId data UserId data
  • 按照约定应返回哪些 REST PUT/POST/DELETE 调用?

    根据 REST 意识形态 PUT POST DELETE 请求的响应正文中应该包含什么 返回码呢 是HTTP OK enough 如果有的话 这种约定的原因是什么 我发现了一篇描述 POST PUT 差异的好文章 发布与放置 http ww
  • 如何从 jquery .load 获取 php 响应

    例如我给出另一个代码 这是我的 some3 php 代码 第一个文件
  • 使标签充当输入按钮

    我怎样才能做一个 a href http test com tag test Test a 就像表单按钮一样 通过充当表单按钮 我的意思是 当单击链接执行操作时method get 或 post 以便能够通过 get 或 post 捕获它
  • C# 构建一个 webservice 方法,它接受 POST 方法,如 HttpWebRequest 方法

    我需要一个接受 POST 方法的 Web 服务 访问我的服务器正在使用 POST 方法 它向我发送了一个 xml 我应该用一些 xml 进行响应 另一方面 当我访问他时 我已经使用 HttpWebRequest 类进行了管理 并且工作正常

随机推荐

  • ROS机器人自主定位导航

    ROS机器人定位导航仿真 智能车 目录 ROS机器人定位导航仿真 智能车 一 创建ROS工作空间1 创建racecar ws文件夹 src文件夹2 初始化工作空间3 下载racecar源代码包4 编译工程 二 仿真1 设置环境变量2 启动赛
  • 【无标题】

    ZED Pro1 xff1a ZED深度相机进行点云可视化和保存 96 提示 xff1a 我在这里想得到深度相机获取的点云数据并且进行可视化 xff0c 虽然光放以及给出一部分代码 xff0c 但是并不能支撑我完成所有工作 xff0c 所以
  • linux系统下使用gcc编译C++程序出现XXX未定义的引用的处理

    在使用gcc编译程序的时候 xff0c 出现了XXX未定义的引用的错误 xff0c 如图 错误原因分析 xff1a 首先 xff0c 我创建了类System xff0c 但是在类System中只有构造函数析构函数以及其他成员函数的定义 xf
  • CMake 常用总结二:CMake 生成静态库与动态库

    引言 CMake 实践帮助我们对 CMake 有一个系统全面的了解 xff0c 并且有大量示例以供参考 xff0c 至少在实际项目中可以让我们有能力看懂并修改项目中现有的 CMake 阅读完 CMake 实践文档 xff0c 认为自己的任务
  • linux c UDP编程实现双向通信(学习记录)

    linux c 编程学习记录 程序说明 用linuxc网络编程的UDP套接字编程 实现内网中不同ip之间服务端和客户端的双向通信 Service端 xff1a span class token macro property span cla
  • python网络程序设计,TCP协议客户端服务端智能聊天设计

    计算机网络基础知识 网络体系结构 xff0c 分层设计的好处 网络协议三要素 xff1a 语法 语义 时序 常见应用层协议 xff1a ftp http smtp pop3 telnet 传输层主要概念 xff1a TCP UDP 端口号
  • 自动化测试用例设计平台(AutoTCG OnLine)

    自动化测试用例设计平台 xff08 AutoTCG OnLine xff09 一 平台介绍二 主要功能三 AutoTCG系列产品 一 平台介绍 1 AutoTCG OnLine是一款在线自动化测试用例设计平台 xff0c 通过在线创建可视化
  • AutoTCG——移动app测试用例自动生成平台

    AutoTCG简介 1 AutoTCG 是一款在线自动化测试用例设计平台 xff0c 通过在线创建可视化测试模型 xff0c 自动生成测试用例 2 AutoTCG采用先进的数学算法 xff0c 可实现全面科学的测试覆盖 3 AutoTCG适
  • AutoTCG——桌面应用软件测试用例自动生成工具

    AutoTCG简介 1 AutoTCG 是一款在线自动化测试用例设计平台 xff0c 通过在线创建可视化测试模型 xff0c 自动生成测试用例 2 AutoTCG采用先进的数学算法 xff0c 可实现全面科学的测试覆盖 3 AutoTCG适
  • 某型车载导航软件测试

    1 设备组成 ETst USB系统主要由硬件部分与软件部分组成 硬件部分包括1553B板卡 RS232 422 485板卡 CAN总线板卡 AD采集板卡 DA转换板卡 DI DO板卡等 所有硬件板卡均采用USB的接口形式 xff0c 从而灵
  • 武器装备自动测试(ATE)系统设计要点

    1 设备组成 ETest RT系统主要由硬件部分与软件部分组成 硬件部分由上位机和实时下位机组成 xff0c 上位机采用商用便携计算机 xff0c 下位机采用PXI测控计算机 上位机安装Windows操作系统 xff0c 运行设备资源管理
  • 导弹制导控制系统半实物仿真系统的设计与实现

    设备组成 Etest CPS系统主要由硬件部分与软件部分组成 硬件部分由PCI机箱 PCI控制器以及各种PCI接口板卡组成 软件部分由测试设计软件模块 测试执行服务软件模块 测试执行客户端软件模块 设备资源管理软件模块等主要软件模块以及曲线
  • 软件功能三方测试报告

    凯云软件测评中心隶属于凯云联创 xff08 北京 xff09 科技有限公司 xff08 简称 xff1a 凯云科技 xff09 测评中心于2016年成立 xff0c 2018年1月通过中国合格评定国家认可委员会CNAS和国防科技工业实验室认
  • 兵器软件通用测试开发工具

  • 兵器软件通用测试开发方法-ETest_DEV

  • 兵器软件通用测试开发环境-ETest_DEV

  • WPS添加下划线,文字尾部不显示下划线问题解决(一个So stupid问题)

    记录一个傻瓜操作 嗯 更想删WPS了 一 问题如下 首先如图 选择wps中的下划线操作 理想中他应该是这样的 选中的内容应该在下划线中间 是吧 默认正常操作就应该这样 实际上它出来的效果是这样 文字后面选中的下划线消失了 软件自身的设置就没
  • 【记录】MPU6050原理快速入门(附手册)

    目录 MPU6050 MPU6050主要参数 MPU6050通信接口 MPU6050电路 向MPU6050的一个寄存器写一个字节的数据 从MPU6050的一个寄存器读一个字节的数据 MPU6050 MPU6050是一个运动处理传感器 xff
  • 【STM32】HAL库三步实现串口重定向(代码复制可用)

    目录 第一步 xff1a 添加标准输入输出头文件 第二步 xff1a 重写fputc 函数 第三步 xff1a 重写fgetc 函数 代码汇总 xff08 直接复制使用 xff09 需要直接来复制 在PC上进行C语言程序开发时 xff0c
  • c# Post请求实例

    server span class token comment 服务器 span span class token keyword using span span class token namespace System span span