本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- GET请求会向服务器发送索取数据的请求,从而获取信息。只是用来查询数据,不会修改、增加数据,无论进行多少次操作结果一样。
- PUT请求是向服务器发送数据的,从而改变信息。用来修改数据的内容,但不会增加数据的种类,无论进行多少次操作结果一样。
- POST请求同PUT请求类似,向服务器发送数据。但是会改变数据的种类等资源,会创建新的内容。
- DELETE请求删除某一个资源。
- ··· ···
以PUT为例,测试Http升级Https:
Http测试代码:
private void PutTest(string url,string parame)
{
UnityWebRequest webRequest = new UnityWebRequest(url,UnityWebRequest.kHttpVerbPUT);
byte[] databyte = Encoding.UTF8.GetBytes(parame);
webRequest.uploadHandler = new UploadHandlerRaw(databyte);
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.timeout = 5;
webRequest.SetRequestHeader("Content-Type","text/json;charset=utf-8");
webRequest.SendWebRequest();
}
如果直接把Url从"http"改为"https",
会有报错:"Curl error 51: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED",证书验证失败,因为没有指定证书,使用的平台使用默认证书验证,导致失败
可以通过设置WebRequest.certificateHandler来指定证书,CertificateHandler类的ValidateCertificate函数返回值是false。自定义子类继承CertificateHandler,重写ValidateCertificate函数,就可以成功验证证书了
重写证书:
public class WebRequestCertificate : CertificateHandler
{
protected override bool ValidateCertificate(byte[] certificateData)
{
//return base.ValidateCertificate(certificateData);
return true;
}
}
Https测试代码:
private void PutTest(string url,string parame)
{
UnityWebRequest webRequest = new UnityWebRequest(url,UnityWebRequest.kHttpVerbPUT);
byte[] databyte = Encoding.UTF8.GetBytes(parame);
webRequest.uploadHandler = new UploadHandlerRaw(databyte);
webRequest.downloadHandler = new DownloadHandlerBuffer();
webRequest.timeout = 5;
//拥有对CertificateHandler对象的引用,该对象可管理此UnityWebRequest的证书验证
webRequest.certificateHandler = new WebRequestCertificate();
webRequest.SetRequestHeader("Content-Type","text/json;charset=utf-8");
webRequest.SendWebRequest();
}
CertificateHandler: 负责拒绝或接受在 https 请求上接收到的证书。注意:自定义证书验证目前仅针对以下平台实施 - Android、iOS、tvOS 和桌面平台。
UnityWebRequest.certificateHandler: 拥有对 CertificateHandler 对象的引用,该对象可管理此 UnityWebRequest 的证书验证。
将此属性设置为"null"可使平台使用默认证书验证。一些平台将根据根证书授权商店来验证证书。其他平台则会完全绕过证书验证。 实测Unity中如果不设置UnityWebRequest.certificateHandler的值,无法使用https(http正常使用)。