命名空间:
using System.Net;
示例代码说明
* 文档中所有的示例函数默认防在WebRequestUtility类中,可自行根据项目实际情况进行更改
* 所有代码均由Gpt生成并人工校对修改,并已经过人工测试完善,但并不一定完美适配所有项目,请自行根据项目实际情况修改
* 代码中的注释也由Gpt生成并人工校对修改,可能存在人工疏
一、 示例函数
/// <summary>
/// 发送GET请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <returns>响应内容</returns>
public static string HttpGet(string url)
{
// 创建一个HttpWebRequest实例,设置请求的URL和请求方法为GET
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
// 获取响应内容
using var response = (HttpWebResponse)request.GetResponse();
using var stream = response.GetResponseStream();
using var reader = new StreamReader(stream);
// 检查响应状态码是否为200
if (response.StatusCode == HttpStatusCode.OK)
{
return reader.ReadToEnd();
}
else
{
Debug.Log($"请求失败,状态码:{response.StatusCode}");
return null;
}
}
二、 调用示例
// 定义请求参数字典
var dict = new Dictionary<string, string>
{
{ "username", "admin" },
{ "password", "123456" }
};
// 构建URL
StringBuilder builder = new StringBuilder(url);
builder.Append('?');
int i = 0;
foreach (var item in dict)
{
if (i > 0)
{
builder.Append('&');
}
builder.AppendFormat("{0}={1}", item.Key, item.Value);
// 如果需要将参数中的特殊字符进行编码,可以使用Uri.EscapeDataString()方法来进行编码
// builder.AppendFormat("{0}={1}", Uri.EscapeDataString(item.Key), Uri.EscapeDataString(item.Value));
i++;
}
// 发送HTTP GET请求,并获取响应结果
var result = WebRequestUtility.HttpGet(builder.ToString());
一、 示例函数
/// <summary>
/// 发送带有请求头的POST请求
/// </summary>
/// <param name="url">请求的URL</param>
/// <param name="headers">请求头</param>
/// <param name="content">请求的内容</param>
/// <returns>响应内容</returns>
public static string HttpPost(string url, string content, Dictionary<string,string> headers)
{
// 创建一个HttpWebRequest实例,设置请求的URL和请求方法为POST
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
// 添加请求头信息
foreach (KeyValuePair<string, string> header in headers)
{
//使用request.ContentType等属性来设置请求头,可以避免出现“ArgumentException: The 'Content-Type' header must be modified using the appropriate property or method.”的错误。除此之外,还有一些其头部信息也是必须通过HttpWebRequest类中的属性进行设置,如需设置其请求头,可依照示例增加case
switch (header.Key)
{
case "Content-Type":
request.ContentType = header.Value;
break;
case "User-Agent":
request.UserAgent= header.Value;
break;
default:
request.Headers.Add(header.Key, header.Value);
break;
}
}
// 将请求内容转换为字节数组
byte[] bytes = Encoding.UTF8.GetBytes(content);
// 设置请求内容的长度
request.ContentLength = bytes.Length;
// 获取请求流,写入请求内容
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
// 获取响应内容
using var response = (HttpWebResponse)request.GetResponse();
using var stream = response.GetResponseStream();
using var reader = new StreamReader(stream);
// 检查响应状态码是否为200
if (response.StatusCode == HttpStatusCode.OK)
{
return reader.ReadToEnd();
}
else
{
throw new Exception($"请求失败,状态码:{response.StatusCode}");
}
}
二、 调用示例
// 设置Url
string url = "<http://example.com/login>";
// 设置请求内容
string content = "{\\"name\\":\\"John Doe\\",\\"age\\":30,\\"email\\":\\"[email protected]\\"}";
// 创建一个字典,用于存储请求头
var headers = new Dictionary<string, string>
{
// 添加请求头User-Agent和Content-Type
{ "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36" },
{ "Content-Type", "application/x-www-form-urlencoded" }
};
// 发送POST请求
var response = WebRequestUtility.HttpPost(url, content, headers);
// 输出响应内容
Debug.Log(response);
命名空间:
using UnityEngine.Networking;
一、 示例函数