C#通过HTTP访问JAVA的控制器

c# 同时被 2 个专栏收录
14 篇文章 0 订阅

                  我们今天说的是HTTP协议,但是我不想直接说,为什么呢?因为其实我们研究技术也不单单就是说直接看代码,看技术,实现功能就好,而是说要本着实际业务场景及架构方式和未来软件发展趋势等多方面来考虑软件实现方式。说道HTTP其实它有很多优势,为什么这么说呢,现在企业业务系统大部分都抛弃老的CS架构,因为早期的CS架构系统维护难度大,系统升级难度大,因为客户端是需要安装的,维护起来比较分散,所以升级等方面效率较低,为了改变这个状况BS架构的软件开始代替传统的CS架构,因为BS架构的系统并不需要专门的安装客户端,对客户端的配置就没有了过多的要求,而且系统的运维主要集中的服务器端,系统更新,升级方便快捷。说完了由来我们就开始进入正题了,先说说不同语言吧,今天我们说说主流的开发BS架构的面相对象语言C#和JAVA,这两种语言都很强大。都是面向对象的编程语言,无论先学哪一种,只要入门了在学另外一种语言其实都不难,但是如何实现两种语言间的通信呢?以前我们都是通过webservice技术来实现不同语言之间的通信,但是有个问题,就是webservice需要单独设立站点,使用上维护上都不是特别的友好,无疑增加了系统的维护成本,所以今天我们就说说通过http的方式来实现调用,我们知道JAVA是一个开源的生态圈,他有很多很好的框架来帮助我们简化我们的开发工作,今天就不在这里主要讲解了,今天主要说的事C#如何调用JAVA,因为C#是闭源生态,但是微软为我们提供了很多很好用的类来帮助我们完成这项工作,今天我们就来说说两个主要的包。using System.Net.Http;using System.Net;这两个类为我们提供了HTTP的使用类,其中System.Net.Http需要我们手动添加引用,不然是找不到的,我们今天主要说的两个类HttpWebRequest,HttpClient,这两个类都能很好的完成我们需要达到的目标,其中HttpWebRequest更底层一点,在讲解这两个类之前,我们先说说HttpWebRequest和HtttRequest的区别,可能有人会很迷惑,这两各类好像啊,是不是功能也差不多,确实他们都是针对HTTP的,确实功能差不多,但是使用位置和场景完全不同,HttpWebRequest主要是用在客户端,对GET和POST请求进行处理,而HtttRequest主要用在服务器端,对请求参数进行接收等操作。所以我们清楚了这两个类,我么现在就可以往下说了,现在我们说一下代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Script.Serialization;

namespace ConsoleApplication5
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string url = "http://IP:PORT/URI";
            //使用HttpWebRequest方式进行调用       
            string param = "KEY=VALUE";
            postHttpRequest(url, param);
            //使用HttpClient方式进行调用
            List<KeyValuePair<String, String>> paramList = new List<KeyValuePair<String, String>>();
            paramList.Add(new KeyValuePair<string, string>("KEY", "VALUE"));
            postHttpClient(url, paramList);
        }
        /*
         * url:请求的servlet地址,不带参数
         * parm:请求的参数,key=value&key1=value1
         * **/
        public static void postHttpRequest(string url, string param) 
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0";
            string requestForm = param;
            byte[] postdatabyte = Encoding.UTF8.GetBytes(requestForm);
            request.ContentLength = postdatabyte.Length;
            request.AllowAutoRedirect = false;
            request.KeepAlive = true;
            Stream stream;
            stream = request.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
            string str_serializer = streamReader.ReadToEnd();
            JavaScriptSerializer _jsonobj = new JavaScriptSerializer();
            PermanentBean _obj = _jsonobj.Deserialize<JsonObject>(str_serializer).obj;
            Console.WriteLine(_obj.permanent_num);
        }

        /*
        * url:请求的servlet地址,不带参数
        * paramList:请求的参数,key=value&key1=value1
        * **/
        public static void postHttpClient(string _url, List<KeyValuePair<String, String>> paramList) 
        {
            HttpClient _httpCilent = new HttpClient();
            _httpCilent.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0");
            HttpResponseMessage _respone = _httpCilent.PostAsync(new Uri(_url), new FormUrlEncodedContent(paramList)).Result;
            string _result= _respone.Content.ReadAsStringAsync().Result;
            JavaScriptSerializer _jsonobj = new JavaScriptSerializer();
            PermanentBean _obj = _jsonobj.Deserialize<JsonObject>(_result).obj;
            Console.WriteLine(_obj.permanent_id);
        }
    }

}


  • 2
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

EvanJiemo

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值