uniapp 发送数据 java uniapp发送请求_客户端


前言

本节我们使用uni app的http请求功能,使用flask搭建一个测试用本地服务器,点击按钮获取服务器返回信息,并显示出来。

一、基础知识

1. HTTP基本知识

(1) HTTP概要

HTTP是Hypertext Transfer Protocol的缩写,Hypertext(超文本)是可以根据客户端请求而跳转的结构化信息。HTTP协议的请求及相应方式设计如下图所示:


uniapp 发送数据 java uniapp发送请求_flask_02


从图中可以看出,服务器端响应客户端请求后立刻断开连接,连接不会维持很久,即使同一个客户端再次发送请求,服务端也无法辨认出是否是原先的那个客户端发出的请求,会以相同的方式处理新的请求。

(2) HTTP请求

HTTP请求是客户端向服务端发送请求消息,请求消息可以分为请求行、消息头、消息体三个部分;请求行含有请求方式信息(GET/POST等),GET用于请求数据,POST主要用于传输数据;消息头包括一些访问的域名、用户代理、Cookie等信息;消息体就是请求的数据,仅在POST方式请求时候输入。


uniapp 发送数据 java uniapp发送请求_uniapp 发送数据 java_03


(3) HTTP响应

HTTP响应是指服务端根据客户端发送的请求中的动作要求做出具体的动作,然后将结果返回给客户端。 HTTP响应消息可以分为状态行、头信息、消息体三个部分;状态行含有请求的状态信息,这是其与请求消息相比最大的区别。


uniapp 发送数据 java uniapp发送请求_uniapp 发送数据 java_04


2. uni.request

在uni-app中,使用uni.request()函数既可以发出http请求,接口说明如下

uni.request(OBJECT)

发起网络请求

在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单。

常用参数如下:


uniapp 发送数据 java uniapp发送请求_uniapp 发送数据 java_05


method 有效值

必须大写,有效值在不同平台差异说明不同。


uniapp 发送数据 java uniapp发送请求_uniapp无法使用substr_06


官方示例:


uni.request({
    url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
    data: {
        text: 'uni.request'
    },
    header: {
 'custom-header': 'hello' //自定义请求头信息
    },
    success: (res) => {
 console.log(res.data);
 this.text = 'request success';
    }
});


3. 本地服务器

(1) flask简介

Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2 模板引擎。 Flask使用BSD授权。 Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

(2) 环境搭建


安装python环境

pip install Flask

pip install flask_cors


(3) 本文测试代码


from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app, supports_credentials=True)

@app.route('/')
def hello_world():
 return 'Hello, World!'

@app.route('/hello')
def hello():
 return 'Hello!'

@app.route('/request')
def request():
 return "request!"

if __name__ == '__main__':
   app.run(host="192.168.1.8", port=5000)


文件结构如下:


uniapp 发送数据 java uniapp发送请求_HTTP_07


(3) 运行

进入到根目录,输入python run.py即可运行。

注意:浏览器访问需要解决跨域问题,安装flask_cors后,增加如下函数


CORS(app, supports_credentials=True)


浏览器输入:http://192.168.1.8:5000/request,运行结果如下:


uniapp 发送数据 java uniapp发送请求_客户端_08


浏览器输入:http://192.168.1.8:5000/hello,运行结果如下:


uniapp 发送数据 java uniapp发送请求_HTTP_09


二、示例

将上一讲app03工程复制为app004,然后拖到HBuilder X中。

1.示例代码

修改pages/index/index.vue中代码如下


<template>
 <view class="container">
 <view class="view_show">
 {{text}}
 </view>
 <button class="btn_view" type="primary" @click='btn_clicked'>中英文切换</button>
 </view>
</template>
<script>
    export default {
        data() {
            return {
                flag: 0,
                text: 'hello world',
            }
        },
        methods: {
            btn_clicked() {
                if (0 == this.flag)
                {
                    this.flag = 1
                    // http 
                    uni.request({
                        url: 'http://192.168.1.8:5000/request', 
                        method:"GET",
                        success: (res) => {
                            console.log(res.data);
                            this.text = res.data
                            uni.showToast({
                                title:"lhost success"
                            })
                        },
                        fail: (res) => {
                            console.log("error…….");
                            uni.showToast({
                                title:"lhost fail",
                            })
                            this.text = 'request localhost fail'
                        }
                    });
                }else
                {
                    this.flag = 0
                    // http 
                    uni.request({
                        url: 'http://192.168.1.8:5000/hello', 
                        success: (res) => {
                            console.log("request baidu success", res.data);
                            this.text = res.data;
                            uni.showToast({
                                title:"baidu success",
                            })
                        },
                        fail: (res) => {
                            console.log("request baidu fail")
                            this.text = "request baidu fail"
                        }
                    });
                }
            },
        }
    }
</script>
<style>
    .container {
        padding: 20px;
        font-size: 14px;
        line-height: 24px;
    }
.view_show {
  margin: 15px auto;
  width: 250px;
  height: 40px;
  line-height: 40px;
  text-align: center;
  border-radius: 5px;
}
.btn_view {
  margin: 15px auto;
  width: 250px;
  height: 40px;
  line-height: 40px;
  text-align: center;
  border-radius: 5px;
}
</style>


上述代码是在上一节代码基础上增加了点击按钮调用uni.request()功能,核心功能代码如下:


uni.request({
    url: 'http://192.168.1.8:5000/request', 
    method:"GET",
    success: (res) => {
 console.log(res.data);
 this.text = res.data
        uni.showToast({
            title:"lhost success"
        })
    },
    fail: (res) => {
 console.log("error…….");
        uni.showToast({
            title:"lhost fail",
        })
 this.text = 'request localhost fail'
    }
});


其中url为本地服务器的访问地址,method为请求方式,默认GET,uni.showToast()函数可以弹出提示框。

三、运行

点击运行--->运行到浏览器--->Chome


uniapp 发送数据 java uniapp发送请求_flask_10


web端显示如下


uniapp 发送数据 java uniapp发送请求_flask_11


Android具体运行过程不在描述,如有疑问,请看第一节,安装后界面如下:


uniapp 发送数据 java uniapp发送请求_uniapp 发送数据 java_12


uniapp 发送数据 java uniapp发送请求_客户端_13


至此我们已经实现,点击按钮,发出http GET请求,访问本地服务器,并将获取的数据实时显示在页面上。