引子
小编这两天在测试API接口,主要是用Postman和Unity上写的程序来做测试,刚刚好给大家分享一下Unity中常用的网络请求方式吧
Unity网络请求程序演练
UnityWebRequest
UnityWebRequest 是 Unity 5.2 引入的一个新的 API,可以用来进行 HTTP、HTTPS、FTP 等协议的网络请求。它支持异步请求,支持 GET、POST等请求方式。UnityWebRequest 能够处理大部分常见的 HTTP 状态响应码,如 404(未找到)、302(重定向)、500(服务器内部错误)等。UnityWebRequest 也支持上传和下载文件,以及在后台运行请求
GET请求
以下是一个使用UnityWebRequest发送GET请求的示例:
IEnumerator GetRequest(string url)
{
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
{
Debug.Log(request.error);
}
else
{
Debug.Log(request.downloadHandler.text);
}
}
你可以将该函数添加到MonoBehaviour脚本中,并在需要的时候调用它。例如:
void Start()
{
string url = "https://jsonplaceholder.typicode.com/todos/1";
StartCoroutine(GetRequest(url));
}
POST请求
以下是使用UnityWebRequest发送POST请求的示例代码:
string url = "http://example.com/api/user/login";
string data = "{\"username\":\"test\",\"password\":\"123456\"}";
UnityWebRequest request = new UnityWebRequest(url, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(data);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string responseText = request.downloadHandler.text;
// 处理服务器返回的数据
}
else
{
Debug.LogError(request.error);
}
在上述示例中,我们使用了 UnityWebRequest 对象来发起一个 POST 请求。我们首先定义了请求目标的 URL 和请求体的数据。接下来创建了一个 UnityWebRequest 类型的对象,指定了请求的方法为 POST,设置了请求体,并指定了请求头。然后通过 SendWebRequest
方法来发送请求。请求发送成功后,我们可以从 downloadHandler
属性中获取服务器的响应数据,并进行相应的处理。如果请求发送失败,则可以从 error
属性获取错误信息。
WWW
WWW 是 Unity 3D 早期版本使用的网络请求类。它很容易使用,可以用来加载图片、音频、视频等资源,也可以用来进行 HTTP 请求。不过,WWW 类没有 UnityWebRequest 强大,它不能很好地处理 HTTP 状态响应码,也不支持上传和下载文件
GET请求
以下是一个简单的Unity WWW Get请求示例:
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour {
void Start () {
StartCoroutine(GetText());
}
IEnumerator GetText() {
// 向http://www.example.com发送GET请求
using (WWW www = new WWW("http://www.example.com")) {
yield return www; // 等待请求完成
// 检查是否有错误
if (string.IsNullOrEmpty(www.error)) {
Debug.Log("Response: " + www.text);
} else {
Debug.Log("Error: " + www.error);
}
}
}
}
在这个例子中,我们向http://www.example.com
发送一个GET请求,并等待它完成。一旦请求完成,我们检查是否有错误,并输出服务器返回的文本。请注意,我们使用了协程,因为WWW请求在Unity中是异步的,因此我们需要等待它完成
POST请求
以下是使用Unity发送POST请求的示例代码:
IEnumerator Post(string url, string data)
{
// 将数据转换为字节数组
byte[] postData = Encoding.UTF8.GetBytes(data);
// 创建一个Web请求
UnityWebRequest request = UnityWebRequest.Post(url, "POST");
// 设置请求体中的数据
request.uploadHandler = new UploadHandlerRaw(postData);
// 设置请求头中的内容类型
request.SetRequestHeader("Content-Type", "application/json");
// 发送请求
yield return request.SendWebRequest();
// 检查请求是否发生错误
if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
{
Debug.Log("POST请求错误:" + request.error);
}
else
{
// 获取响应数据
string response = request.downloadHandler.text;
// 处理响应数据
Debug.Log("POST请求响应:" + response);
}
}
使用示例:
StartCoroutine(Post("https://httpbin.org/post", "{\"name\": \"test\"}"));
该示例将发送一个POST请求到https://httpbin.org/post网址,并携带一个名为test的JSON数据。您可以根据需要修改url和data参数来发送不同的请求。
HttpClient
HttpClient 是一个.NET 的 Http 编程库,可以用来在 Unity 中进行网络请求。它支持异步请求,支持 GET、POST 等请求方式。不过,HttpClient 是一个独立的 .NET 库,需要手动将其导入项目中
GET请求
下面是一个使用C#中HttpClient类发起GET请求的示例代码:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using var client = new HttpClient();
// 设置请求头信息,可选
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
try
{
// 发起GET请求
var response = await client.GetAsync("https://www.example.com/");
response.EnsureSuccessStatusCode(); // 确保响应成功
var responseBody = await response.Content.ReadAsStringAsync(); // 获取响应主体内容
Console.WriteLine(responseBody);
}
catch (HttpRequestException e)
{
Console.WriteLine($"请求失败:{e.Message}");
}
}
}
这个示例使用了HttpClient
类中的GetAsync
方法发起GET请求,并使用EnsureSuccessStatusCode
方法确保响应成功。响应的主体内容可以使用ReadAsStringAsync
方法获取。在请求之前,可以使用DefaultRequestHeaders
属性设置请求头信息,也可以在发送请求时传递HttpHeaders
对象作为参数实现。
POST请求
以下是使用Unity中的HttpClient进行POST请求的示例:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class HttpClientExample : MonoBehaviour {
async void Start() {
var values = new Dictionary<string, string> {
{ "username", "example_user" },
{ "password", "example_password" }
};
var content = new FormUrlEncodedContent(values);
using (var client = new HttpClient()) {
var response = await client.PostAsync("http://example.com/api/login", content);
var responseString = await response.Content.ReadAsStringAsync();
var responseData = JsonConvert.DeserializeObject<LoginResponse>(responseString);
Debug.Log("Login Status: " + responseData.success);
Debug.Log("User ID: " + responseData.user_id);
}
}
}
public class LoginResponse {
public bool success { get; set; }
public string user_id { get; set; }
}
在这个示例中,我们创建了一个Dictionary对象来存储POST请求的参数,然后使用FormUrlEncodedContent将其转换为可以发送到服务器的内容。我们将POST请求发送到“http://example.com/api/login”地址,并使用HttpClient来处理响应。最后,我们使用JsonConvert将响应数据反序列化为LoginResponse对象,并将其输出到Unity的控制台中。
请注意,由于HttpClient是异步的,我们在使用它时必须使用async和await关键字。这将确保我们的应用程序在等待响应时不会被挂起。
RESTful API
是一种基于 HTTP 协议的 API 接口,它使用 HTTP 的 POST、GET、DELETE、PUT 等方法来进行资源的操作。在 Unity 中,可以使用 UnityWebRequest、HttpClient 等类库来调用 RESTful API 接口
GET请求
下面是一个基本的Unity中使用RESTful API进行GET请求的示例代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
public class RESTfulAPIExample : MonoBehaviour {
IEnumerator Start() {
// 设置请求的url
string url = "http://www.example.com/api/data";
// 创建GET请求对象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json";
// 发送请求并获取响应信息
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
string result = reader.ReadToEnd();
reader.Close();
response.Close();
// 处理响应数据
Debug.Log(result);
yield return null;
}
}
以上代码片段通过使用Unity的协程功能,向指定的url(即http://www.example.com/api/data)发送GET请求,并从响应中获取数据并打印到控制台中。该请求使用了application/json的Content-Type头部,如果需要使用其他类型的Content-Type,需要进行相应的修改。
需要注意,以上代码中的请求均为同步请求,如果需要使用异步请求或其他更高级的功能,需要进行相应的扩展和修改。
POST请求
下面是一个使用Unity的C#代码示例,用于向RESTful API发送POST请求:
IEnumerator PostRequest(string url, string jsonData)
{
UnityWebRequest request = UnityWebRequest.Post(url, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(jsonData);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.ConnectionError ||
request.result == UnityWebRequest.Result.ProtocolError)
{
Debug.LogError(request.error);
}
else
{
Debug.Log(request.downloadHandler.text);
}
}
示例中的 url
参数是POST请求的目标URL, jsonData
参数是要发送的JSON数据。
该代码使用Unity的 UnityWebRequest
类来发送POST请求。 UnityWebRequest
允许您指定请求的类型(在本例中为“POST”),上传请求主体,并从响应中下载响应主体。
使用 yield
关键字使此函数成为协程,以确保请求在后台线程上执行而不会阻塞主线程。在协程完成后,检查UnityWebRequest对象的结果以确定是否存在错误,并输出响应的文本内容或错误消息。
Socket
适用于自定义的网络协议,可实现定制化的网络通信
GET请求
这里是一个简单的 Unity C# Socket GET请求示例:
using System;
using System.Net.Sockets;
using System.Text;
public class SocketGETRequest {
public static void Main() {
// 创建一个Socket对象
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 连接到目标网站
clientSocket.Connect("www.example.com", 80);
// 构建HTTP GET请求
string getRequest = "GET / HTTP/1.1\r\n";
getRequest += "Host: www.example.com\r\n";
getRequest += "Connection: Close\r\n\r\n";
// 发送请求
byte[] requestBytes = Encoding.ASCII.GetBytes(getRequest);
clientSocket.Send(requestBytes);
// 接收响应
byte[] buffer = new byte[1024];
int bytesRead = clientSocket.Receive(buffer);
string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
// 输出响应
Console.WriteLine(response);
// 关闭Socket连接
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
}
这个示例中,我们创建了一个Socket对象,连接到了一个名为www.example.com的网站,然后构建了一个HTTP GET请求,将请求发送给服务器,并等待响应。最后,我们输出了响应,并关闭了Socket连接。
POST请求
以下是使用Unity的C#代码示例来进行Socket POST请求的示例:
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class SocketClient
{
private Socket socket;
public SocketClient()
{
try
{
// 创建Socket
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
catch (SocketException ex)
{
Debug.Log($"创建Socket失败: {ex}");
}
}
public void Request(string url, string data)
{
try
{
// 解析URL
Uri uri = new Uri(url);
IPAddress ipAddress = Dns.GetHostAddresses(uri.Host)[0];
IPEndPoint remoteEndPoint = new IPEndPoint(ipAddress, uri.Port);
// 连接服务器
socket.Connect(remoteEndPoint);
// 构造HTTP POST请求
string request = $"POST {uri.PathAndQuery} HTTP/1.1\r\n" +
$"Host: {uri.Host}\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
$"Content-Length: {data.Length}\r\n" +
"Connection: close\r\n" +
"\r\n" +
$"{data}";
// 发送请求
byte[] requestBytes = Encoding.ASCII.GetBytes(request);
socket.Send(requestBytes);
// 接收服务器响应
byte[] receiveBuffer = new byte[1024];
int receiveSize = socket.Receive(receiveBuffer);
// 处理服务器响应
string response = Encoding.ASCII.GetString(receiveBuffer, 0, receiveSize);
Debug.Log($"服务器响应:{response}");
}
catch (Exception ex)
{
Debug.Log($"请求异常:{ex}");
}
finally
{
// 关闭连接
socket.Close();
}
}
}
使用示例:
SocketClient socketClient = new SocketClient();
socketClient.Request("http://localhost:8080/your_api_path", "param=value");
注:以上示例仅用于演示Socket POST请求的基本流程,实际应用中需要考虑更多的异常处理、数据加密等安全问题。
总结
在使用网络请求的过程中,需要注意请求方式的选择、请求参数的设置、请求结果的处理等方面。同时,也需要注意网络请求过程中可能出现的错误情况,如网络连接失败、请求超时、服务器返回错误等,需要进行合理的异常处理文章来源:https://www.toymoban.com/news/detail-709138.html
要是有疑问大家可以加我微信详聊 yf1553653788文章来源地址https://www.toymoban.com/news/detail-709138.html
到了这里,关于Unity常用网络请求方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!