C#的HTTP 客户端和服务

举报
Rolle 发表于 2024/10/31 20:36:50 2024/10/31
【摘要】 在网络编程中,HTTP(超文本传输协议)是应用最为广泛的协议之一。C#提供了强大的类库来支持HTTP通信,包括HttpClient用于客户端请求,以及HttpListener用于服务端监听。本文将详细介绍如何在C#中使用这些工具进行HTTP通信。HTTP客户端:HttpClientHttpClient是.NET中用于发送HTTP请求和接收HTTP响应的类。它支持同步和异步操作,推荐使用其异步...

在网络编程中,HTTP(超文本传输协议)是应用最为广泛的协议之一。C#提供了强大的类库来支持HTTP通信,包括HttpClient用于客户端请求,以及HttpListener用于服务端监听。本文将详细介绍如何在C#中使用这些工具进行HTTP通信。

HTTP客户端:HttpClient
HttpClient是.NET中用于发送HTTP请求和接收HTTP响应的类。它支持同步和异步操作,推荐使用其异步方法来避免阻塞主线程。

创建HttpClient实例
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(“https://api.example.com”);
HttpResponseMessage response = await client.GetAsync("/data");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
}
}
发送GET请求
cstring result = await httpClient.GetStringAsync(“https://api.example.com/data”);
发送POST请求
var content = new StringContent(“key=value”, Encoding.UTF8, “application/x-www-form-urlencoded”);
HttpResponseMessage response = await httpClient.PostAsync(“https://api.example.com/data”, content);
错误处理
try
{
HttpResponseMessage response = await httpClient.GetAsync(“https://api.example.com/data”);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
}
catch (HttpRequestException e)
{
Console.WriteLine("\nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
}
HTTP服务端:HttpListener
HttpListener是.NET中用于创建HTTP服务端的类。它提供了一个简单的方式来监听和响应HTTP请求。

创建和启动服务端
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add(“http://localhost:8080/”);
listener.Start();
Console.WriteLine(“Listening…”);

    while (true)
    {
        HttpListenerContext context = await listener.GetContextAsync();
        HttpListenerRequest request = context.Request;
        HttpListenerResponse response = context.Response;

        string responseString = "Hello, world!";
        byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);

        response.ContentLength64 = buffer.Length;
        Stream output = response.OutputStream;
        output.Write(buffer, 0, buffer.Length);
        // You must close the output stream.
        output.Close();
    }
}

}
处理请求
while (listener.IsListening)
{
HttpListenerContext context = await listener.GetContextAsync();
if (context.Request.Url.AbsolutePath == “/data”)
{
// Handle request for /data
}
}
安全性
在服务端,安全性是一个重要的考虑因素。你应该确保:

验证所有输入数据。
使用HTTPS来加密传输的数据。
设置适当的HTTP响应头,如X-Content-Type-Options,X-Frame-Options等。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。