(1)通过sbt安装依赖
libraryDependencies += "org.apache.httpcomponents" % "httpclient" % "4.5.3"
libraryDependencies += "org.apache.httpcomponents" % "httpcore" % "4.4.9"
libraryDependencies += "com.alibaba" % "fastjson" % "1.2.32"
2 服务端
2.1 基于Flask的服务端
from flask import Flask
from flask import make_response
from flask import request
from functools import wraps
import json
app = Flask(__name__)
# 跨域访问装饰器
def allow_cross_domain(fun):
"""
装饰器 允许app跨域访问
:param fun: 固定写法
:return: None
"""
@wraps(fun)
def wrapper_fun(*args, **kwargs):
rst = make_response(fun(*args, **kwargs))
rst.headers['Access-Control-Allow-Origin'] = '*'
rst.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE'
allow_headers = "Referer,Accept,Origin,User-Agent"
rst.headers['Access-Control-Allow-Headers'] = allow_headers
return rst
return wrapper_fun
@app.route('/')
@allow_cross_domain
def hello_world():
return 'Welcome to use me!'
@app.route('/use', methods=['POST','GET'])
@allow_cross_domain
def use():
if request.method == 'POST':
try:
raw_json = request.get_data()
data_dict = json.loads(raw_json)
print(data_dict)
result = {"name":"lucy","age":20}
return json.dumps(result)
except Exception as e:
return {"error": e}
else:
result = {"hello":"me"}
return json.dumps(result)
if __name__ == '__main__':
app.run(host='127.0.0.1', port=9000, threaded=True)
2.2 python3自带web模块
(1)进入待分享的目录
(2)执行命令python3 -m http.server 端口号
注意:不填端口号则默认使用8000端口。
(3)浏览器访问该主机的地址:http://IP:端口号/
python3 -m http.server 54323
后台运行
nohup python3 -m http.server 54323 >> output.log 2>&1 &
3 scala的网络请求
3.1 get请求
get请求参数是携带在url里面的,在?后面携带参数,每个参数之间用&隔开,举例:
www.IP:5000/use?name=lucy&age=18
如果参数里面有中文要把中文转成unicode编码
import com.alibaba.fastjson.JSON
import org.apache.http.client.methods.{HttpGet, HttpPost}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClients
import org.apache.http.util.EntityUtils
object MyHttpResponse {
def main(args: Array[String]): Unit = {
val url = "http://localhost:9000/aa.txt"
val httpClient = HttpClients.createDefault() //创建client 实例
val get = new HttpGet(url) // 创建get实例
val response = httpClient.execute(get) //发送请求
val result = EntityUtils.toString(response.getEntity) //获取返回结果
print(result)
}
}
3.2 post请求
post请求携带参数可以比较多,不在url里面,是要set进去的。
import com.alibaba.fastjson.JSON
import org.apache.http.client.methods.{HttpGet, HttpPost}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClients
import org.apache.http.util.EntityUtils
object MyHttpResponse {
def main(args: Array[String]): Unit = {
val url = "http://localhost:9000/use"
val httpClient = HttpClients.createDefault() //创建client 实例
val post = new HttpPost(url) // 创建post实例
post.addHeader("Content-Type", "application/json")
val params = """{"name":["lilei"],"conditions":{}}"""
if (params != null) {
post.setEntity(new StringEntity(params, "UTF-8"))
}
val response = httpClient.execute(post) // 发送请求
val result = EntityUtils.toString(response.getEntity, "UTF-8") // 获取返回结果
print(result)
}
}