Scala-2-通过HttpClients发送get和post请求

本文介绍如何在Flask框架中实现跨域服务,并演示了GET和POST请求的处理方式。同时,提供了Scala中使用Apache HttpClient进行网络请求的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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)
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值