本文链接:https://blog.csdn.net/weixin_40586592/article/details/85000822
本篇文章讨论C# 客户端,进行HTTP通信,适用JSON数据格式。

下边为GET和POST请求

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
 
namespace wode.HTTP
{
    class HttpUitls
    {
        public static string Get(string Url)
        {
            //System.GC.Collect();
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Proxy = null;
            request.KeepAlive = false;
            request.Method = "GET";
            //request.ContentType = "application/json; charset=UTF-8";
            request.ContentType = "application/x-www-form-urlencoded";//窗体数据被编码为名称/值对形式
            request.AutomaticDecompression = DecompressionMethods.GZip;
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
            string retString = myStreamReader.ReadToEnd();
 
            myStreamReader.Close();
            myResponseStream.Close();
 
            if (response != null)
            {
                response.Close();
            }
            if (request != null)
            {
                request.Abort();
            }
 
            return retString;
        }
        /// <summary>
        /// Post请求可用
        /// </summary>
        /// <param name="Url"></param>
        /// <param name="Data"></param>
        /// <param name="Referer"></param>
        /// <returns></returns>
        public static string Post(string Url, string Data, string Referer)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.Referer = Referer;
            //request.Proxy = new WebProxy("192.168.1.12",80);
            byte[] bytes = Encoding.UTF8.GetBytes(Data);
            request.ContentType = "application/json; charset=UTF-8"; ;//窗体数据被编码为名称/值对形式
            //request.ContentType = "application/json";
            request.ContentLength = bytes.Length;
            Stream myResponseStream = request.GetRequestStream();
            myResponseStream.Write(bytes, 0, bytes.Length);
 
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            string retString = myStreamReader.ReadToEnd();
 
            myStreamReader.Close();
            myResponseStream.Close();
 
            if (response != null)
            {
                response.Close();
            }
            if (request != null)
            {
                request.Abort();
            }
            return retString;
        }
 
    }
}
下边为前台界面进行调用方法,采用的是键值对形式

//使用POST请求服务器
            var para = new Dictionary<string, string>();
            para.Add("图标", haha);
            string json = JsonConvert.SerializeObject(para);//序列化数据
            string url = "http://192.168.9.9:8080/。。。。。";
            string postJson = HttpUitls.Post(url, json, "");
 
            //使用GET请求服务器
            string baseUrl = "http://192.168.9.9.。。。。";
            string getUrl = baseUrl + "?" + "au=" + au;
            string getJson = HttpUitls.Get(getUrl);
如果想让接收的json形式比较直观,可以调用如下方法

/// <summary>
        /// 格式化字符串,方便查看
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private string ConvertJsonString(string str)
        {
            JsonSerializer serializer = new JsonSerializer();
            TextReader tr = new StringReader(str);
            JsonTextReader jtr = new JsonTextReader(tr);
            object obj = serializer.Deserialize(jtr);
            if(obj!=null)
            {
                StringWriter textWriter = new StringWriter();
                JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
                {
                    Formatting = Formatting.Indented,
                    Indentation = 4,
                    IndentChar = ' '
 
                };
                serializer.Serialize(jsonWriter, obj);
                return textWriter.ToString();
            }
            else
            {
                return str;
            }
        }
上述这些方法的调用必须添加Newtonsoft.Json命名空间。谢谢大家!

C# 客户端HTTP通信相关推荐

  1. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  2. Java中利用socket实现简单的服务端与客户端的通信(基础级)

    在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...

  3. 【Socket网络编程】6.两个既能收也能发的udp客户端进行通信的原理

    两个既能收也能发的udp客户端进行通信的原理 ​发送数据时可能会用到INADDR_BROADCAST代表255.255.255.255的广播地址,作用范围只能在当前局域网. 接收数据可能会用到INAD ...

  4. linux多个客户端如何通信_linux实现多个客户端通信进阶

    2020.07.31 linux分享 ● ● ● #01#前言 前情回顾: 在整理上学期资料同时将部分代码分享,将以代码书写时间为时间线,按优化程度逐步发出,代码均为在linux下c编程. 上回功能: ...

  5. Linux socket编程(二) 服务器与客户端的通信

    http://www.cnblogs.com/-Lei/archive/2012/09/04/2670964.html 上一篇写了对套接字操作的封装,这一节使用已封装好的Socket类实现服务器与客户 ...

  6. 基于 HTML5 WebGL 的 3D 服务器与客户端的通信

    这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 机房方面的模拟一般都是需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算 ...

  7. python安卓开发实例_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

  8. Java多线程实现多客户端的通信

    title: Java多线程实现多客户端的通信 date: 2019-05-05 12:50:00 Java多线程实现多客户端的通信 昨天学了Java中网络支持Socket应用,写了一个基于TCP通信 ...

  9. android 手机 与 python服务器_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

  10. 简单的Java服务器和客户端的通信

    系列文章: ESP8266的AP模式与STA模式简单测试 简单的Java服务器和客户端的通信 STM32 ESP8266和Java服务器透传模式下的双向通信 jsp向servlet传输数据 Servl ...

最新文章

  1. 生信分析-TBtools绘制热图
  2. java文件用editplus乱码,EditPlus设置编码后,编译时仍然出现乱码
  3. 【mybatis基础】mybatis开发dao两种方法
  4. 用Docker创建Nexus
  5. python函数参数定义不合法_下列哪种函式参数定义不合法?
  6. Visual Paradigm 教程[UML]:如何在序列图中使用持续时间约束?
  7. 苹果电脑macbook怎样强制关闭软件
  8. roc与auc曲线的理解
  9. mysql如何处理图片吗_如何解决mysql插入图片后缀名问题?
  10. flow 静态类型检查 js
  11. css px转rem工具,支持生产整个css文件统一修改
  12. 图文并茂排序与算法总结
  13. conda 克隆环境
  14. win7计算机搜索功能没有了,win7搜索功能不能用了怎么办|win7搜索功能不见了怎么解决? - 学无忧...
  15. 仿朋友圈图片查看功能
  16. C++ std::mutex 用法详解
  17. 封装好的散点图拟合八大函数回归模型(逆、幂函、对数、S、复合、生长、指数 、线性函数,)
  18. Android应用内跳转到google play或者其他应用市场详情页下载或者评价
  19. (更新时间)2021年6月2日 商城高并发秒杀系统(.NET Core版) 20-性能优化-系统配置
  20. SDOI2014 Round1 day2

热门文章

  1. markdown如何设置图片大小_Markdown编辑知乎文章的完全攻略
  2. app自定义图标 vue_uniapp自定义图标组件
  3. 传递子类 java_Java,将主类传递给子类,错误的编码风格?
  4. mysql 聚簇索引实例_MySQL聚簇索引
  5. 华为鸿蒙战略大会,华为发布鸿蒙2.0手机版的三大战略意义,全场景万物互联只是其一...
  6. java的回文是什么_Java实现回文判断
  7. php面向对象代码_PHP面向对象之抽象类详解(代码实例)
  8. 计算机玩游戏不能全屏,玩游戏屏幕两边有黑条?教你简单几步轻松解决-win7玩游戏不能全屏...
  9. linux mint 安装php,使用apt-get方式为Linux Mint 13安装PHP+MYSQL+Apache
  10. linux内核字符串逆序,Linux内核中常用字符串函数实现