用C#实现http协议的接口接收数据demo程序

我有一个预警消息接收调用的文档,需要实现接口数据调用和返回。请见下面的文档。需要用C#做一个demo程序。

http://101.43.218.219/DouyinTestB/1002.htm

参考GPT和自己的思路:以下是使用C#实现http协议的接口接收数据的示例程序:

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Web.Script.Serialization;

namespace HttpPostExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://112.124.23.63:1888/ai/message";

            string jsonString = "{\"rtspUrl\":\"rtsp://192.168.2.77:11100/live\",\"boxId\":\"80\",\"type\":\"11\",\"typeName\":\"禁区闯入\",\"boxName\":\"加油站\",\"deviceName\":\"卸油区\",\"GBID\":\"60082006\",\"deviceId\":\"exghlou346lk\",\"indexCode\":\"2850063219\",\"enterName\":\"xx科技\",\"enterCode\":\"3006259\",\"signBigAvatar\":\"09xgb…xcv12\",\"signAvatar\":\"09xgb…xcv12\",\"signTime\":\"2022-12-05 15:12:03\",\"channelNo\":\"83\",\"x\":\"62\",\"y\":\"500\",\"w\":\"180\",\"h\":\"89\",\"messagerType\":\"\",\"eBike\":\"1\",\"smoke\":\"1\",\"fire\":\"1\",\"isExist\":\"1\",\"ext\":\"1\",\"tanker\":\"2\",\"sudire\":\"2\",\"fireControl\":\"2\",\"cover\":\"2\",\"licensePlateNumber\":\"皖AA82G7\",\"illegalParking\":\"1\",\"age\":\"28\",\"gender\":\"0\",\"glasses\":\"1\",\"mask\":\"1\"}";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json";

            byte[] byteArray = Encoding.UTF8.GetBytes(jsonString);
            request.ContentLength = byteArray.Length;

            using (Stream streamWriter = request.GetRequestStream())
            {
                streamWriter.Write(byteArray, 0, byteArray.Length);
            }

            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string responseString = reader.ReadToEnd();
                Console.WriteLine(responseString);
            }
            catch (WebException ex)
            {
                Console.WriteLine("An error occurred: " + ex.Message);
            }

            Console.ReadLine();
        }
    }
}


用HttpWebRequest对象创建了一个POST请求,设置了Content-Type为"application/json",并将JSON字符串写入请求流中。接下来,我们发送请求并等待响应。最后,我们从响应流中读取响应字符串并将其打印到控制台上。

值得注意的是,在此示例程序中,我们将JSON字符串硬编码为一个C#字符串。在实际应用中,你需要根据具体情况动态生成JSON字符串,例如使用JSON库(例如Json.NET)或JavaScriptSerializer类来序列化C#对象为JSON字符串。

C# json post 发送,参考:https://blog.csdn.net/shan1774965666/article/details/127600976

参考:gpt
以下是一个使用C#实现POST方式调用接口并返回数据的示例代码

using System;
using System.Net;
using System.IO;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        string url = "http://example.com/api"; // 接口地址
        string postData = "param1=value1&param2=value2"; // POST数据,格式为key=value&key=value
        byte[] data = Encoding.UTF8.GetBytes(postData); // 将POST数据转换为字节数组

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // 创建请求对象
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = data.Length;

        using (Stream stream = request.GetRequestStream())
        {
            stream.Write(data, 0, data.Length); // 将POST数据写入请求流
        }

        HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // 发送请求并获取响应

        string responseData = string.Empty;
        using (Stream responseStream = response.GetResponseStream())
        {
            StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
            responseData = reader.ReadToEnd(); // 读取响应流中的数据
        }

        Console.WriteLine(responseData); // 输出响应数据
    }
}


需要注意的是,这里假设接口返回的数据是UTF-8编码的。如果接口返回的数据采用其他编码方式,需要相应地修改代码。此外,如果接口需要进行身份验证等操作,也需要在请求中添加相应的头部信息或参数。

基于bing、GPT部分内容和本人思考总结:
以下是使用C#实现HTTP协议接收数据的示例程序:

csharp
Copy code
using System;
using System.IO;
using System.Net;
using System.Text;
namespace HttpServer
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpListener listener = new HttpListener();
            listener.Prefixes.Add("http://localhost:8080/"); // 设定监听地址
            listener.Start(); // 开始监听
            Console.WriteLine("Listening...");
            while (true)
            {
                HttpListenerContext context = listener.GetContext(); // 接收请求
                HttpListenerRequest request = context.Request;
                Console.WriteLine("Request URL: " + request.Url.ToString());
                // 读取请求内容
                Stream inputStream = request.InputStream;
                StreamReader sr = new StreamReader(inputStream, Encoding.UTF8);
                string requestContent = sr.ReadToEnd();
                // 处理请求
                string responseContent = "Hello, World!"; // 这里设置响应内容
                // 发送响应
                HttpListenerResponse response = context.Response;
                response.StatusCode = 200;
                response.ContentType = "text/plain";
                byte[] buffer = Encoding.UTF8.GetBytes(responseContent);
                response.ContentLength64 = buffer.Length;
                response.OutputStream.Write(buffer, 0, buffer.Length);
                response.OutputStream.Close();
            }
        }
    }
}


这个示例程序使用HttpListener类来实现HTTP协议的接口接收。程序先创建了一个HttpListener对象,并添加了一个监听地址,然后通过调用Start方法开始监听。在程序的主循环中,程序调用GetContext方法来接收请求,并读取请求内容。然后根据请求内容进行处理,并设置响应内容,最后通过HttpListenerResponse对象的OutputStream属性发送响应。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是用C#实现http协议接口接收预警消息的demo程序的代码:

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            PostData();
        }

        static async void PostData()
        {
            using (var client = new HttpClient())
            {
                var values = new Dictionary<string, string>
                {
                    {"param1", "value1"},
                    {"param2", "value2"}
                };

                var content = new FormUrlEncodedContent(values);

                var response = await client.PostAsync("http://101.43.218.219/DouyinTestB/1002.htm", content);

                var responseString = await response.Content.ReadAsStringAsync();

                Console.WriteLine(responseString);
            }
        }
    }
}

这是一个简单的示例,您需要根据接口的具体要求进行相应的修改。调用接口时,您需要将参数等信息替换为接口要求的内容,在该代码中将其作为字典的键值对形式传递。调用PostAsync方法发送POST请求,然后读取响应数据。最后,您可以将响应数据打印到控制台,进行调试。
如果我的回答解决了您的问题,请采纳!