WWW网络请求

1.Get方法

1.1 文本下载

private string weatherApi = "http://www.sojson.com/open/api/weather/json.shtml?city={0}";
    //private string weatherApi = "http://www.sojson.com/open/api/weather/xml.shtml?city={0}"; //xml format
    public string city = "闵行区";
    private string fullWeatherApi;

    public void OnRequest()
    {
        StartCoroutine(DataRequest(fullWeatherApi));
    }

    private bool isResponseValid(WWW www)
    {
        if (www.error != null)
        {
            print("Conn failed!");
            return false;
        }

        if(string.IsNullOrEmpty(www.text))
        {
            print("Bad result");
            return false;
        }

        return true;
    }

    private IEnumerator DataRequest(string url)
    {
        WWW www = new WWW(url);
        yield return www;

        if (!isResponseValid(www)) yield break;

        print(www.text);
    }

1.2 Texture下载

public GameObject quad;
    private Texture2D downloadTexture;

    public void OnRequest()
    {
        ImageManage(SetSpirite);
    }

    private void ImageManage(Action<Texture2D> action)
    {
        if(downloadTexture ==null)//缓存检测
        {
            StartCoroutine(ImageRequest(beautyApi, action));
        }
        else
        {
            action(downloadTexture);
        }
    }

    private IEnumerator ImageRequest(string url,Action<Texture2D> action)
    {
        WWW www = new WWW(url);
        yield return www;
        print("request");
        downloadTexture = www.texture;
        action(www.texture);
    }

    private void SetSpirite(Texture2D texture)
    {
        quad.GetComponent<MeshRenderer>().material.mainTexture = texture;
    }

2.Post方法

2.1 基本方法

public string url = "https://api-cn.faceplusplus.com/facepp/v3/detect";
    private Hashtable postData = new Hashtable();

    public void OnRequest()
    {
        StartCoroutine(RequestData());
    }
    IEnumerator RequestData()
    {
        WWWForm postForm = new WWWForm();

        foreach(DictionaryEntry arg in postData)
        {
            postForm.AddField(arg.Key.ToString(), arg.Value.ToString());
        }

        WWW www = new WWW(url, postForm);
        yield return www;
        print(www.text);
    }
    // Use this for initialization
    void Start () {
        postData.Add("api_key", "**************");
        postData.Add("api_secret", "**************");
        postData.Add("image_url", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1508759666809&di=b3748df04c5e54d18fe52ee413f72f37&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fimgad%2Fpic%2Fitem%2F562c11dfa9ec8a1389c45414fd03918fa1ecc06c.jpg");
    }
    
    // Update is called once per frame
    void Update () {
        
    }

2.2 Post上传二进制文件

在这里插入图片描述
post文件可通过WWWForm的AddBinaryData方法即可,第一个参数即为要post的文件的参数名称,第二参数为byte[]类型的文件,第三个为文件名称,第四个为类型。后两个参数可略掉。

form.AddBinaryData("image_file", image, name, "file/jpg");
public IEnumerator WwwPostRequest(byte[] image,string name,int i)
    {

        WWWForm form = new WWWForm();
        form.AddField("api_key", "*************");
        form.AddField("api_secret", "***************");
        form.AddField("faceset_token", "***************");
        form.AddBinaryData("image_file", image, name, "file/jpg");
   
        WWW w = new WWW("**********************", form);
        yield return w;
}

3.补充

unity 通过www下载时,通过重载的形式来确定get,post方法(不同post方式也在重载中确定):

(一)public WWW(string url, WWWForm form);//对应post的multipart/form-data方式

(二)public WWW(string url, byte[] postData);//对应application/x-www-form-urlencoded(此方式对应postdata为把传入参数按&符号连接后转化为byte[])和application/json方式(postdata为即把传入参数转换成json格式,在转化为byte[])
(三)public WWW(string url, byte[] postData, Dictionary<string, string> headers);//即通过Dictionary指定post的方式如下:

    System.Collections.Hashtable headers = new System.Collections.Hashtable();
    headers.Add("Content-Type", "application/x-www-form-urlencoded");//哈希表的数据格式

    string data = "username=post&password=6789";
    byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(data);


    WWW www = new WWW("http://127.0.0.1/Test.php", bs, headers);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值