rust实现post小程序(完整代码)

 更新时间:2024年04月12日 10:53:38   作者:永远的麦田  
这篇文章主要介绍了rust实现一个post小程序,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

主要是白天折磨了半天,无论如何post出去都不能成功,搞得我专门修改了一堆server的代码,以拦截任何访问服务器的数据,结果还是返回502,结果晚上回来一遍过,也真是奇怪的不行。先把一遍过的代码放出来,防止哪天又卡在这儿过不去。

//main.rs
use reqwest::Error;
//main.rs
async fn post_request() -> Result<(), Error> {
    let url = "http://localhost:30241/dfc/get_block_stock";
    let json_data = r#"{"block_source": "gnn"}"#;
    let client = reqwest::Client::new();
    let response = client
        .post(url)
        .header("Content-Type", "application/json")
        .body(json_data.to_owned())
        .send()
        .await?;
    println!("Status Code: {}", response.status());
    let response_body = response.text().await?;
    println!("Response body: \n{}", response_body);
    Ok(())
}
#[tokio::main]
async fn main() -> Result<(), Error> {
    post_request().await?;
    Ok(())
}

Cargo.toml文件如下:

[package]
name = "untitled"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
tokio = { version = "1.15", features = ["full"] }
reqwest = { version = "0.11.22", features = ["json"] }

意思很简单,就是访问路径为/dfc/get_block_stock,json数据为:

{"block_source": "gnn"}

后面就是打印结果了。居然直接一遍过了,在公司可是花了好几小时查遍了所有资料,也改遍了服务器的代码。

最后再贴出服务器的python测试代码:my_http_server.py

from sanic import Sanic
from sanic import response, request
from sanic_cors import CORS
app = Sanic(name='my-http-server')
CORS(app)
def success_msg(err_code=0):
    res = dict()
    res["err_code"] = err_code
    res["err_msg"] = "success"
    return res
@app.middleware("response")
def cors_middle_res(request: request.Request, response: response.HTTPResponse):
    """跨域处理"""
    allow_origin = '*'
    response.headers.update(
        {
            'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT, DELETE',
            'Access-Control-Allow-Headers': 'Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization',
        }
    )
@app.route("/dfc/get_block_stock", methods=['POST'])
async def order_buy_sell(request):
    print("order_buy_sell: from: {}, path: {}, data: {}".format(request.socket[0], request.path, request.json))
    res = success_msg(0)
    result = dict()
    res["result"] = result
    return response.json(res)

然后是main.py

from my_http_server import app
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    try:
        port = 30241
        print("my-http-server will started, serving at http://localhost:{}".format(port))
        app.run(host="0.0.0.0", port=port)
    except KeyboardInterrupt:
        print("python-sanic-http-server error.")

最后由于服务器运行用到了sanic组件和一个跨域组件,所以最后记得

pip install sanic
pip install sanic_cors

到此这篇关于rust实现一个post小程序的文章就介绍到这了,更多相关rust post小程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Rust包和Crate超详细讲解

    Rust包和Crate超详细讲解

    这篇文章主要介绍了Rust包管理和Crate,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Rust使用Sled添加高性能嵌入式数据库

    Rust使用Sled添加高性能嵌入式数据库

    这篇文章主要为大家详细介绍了如何在Rust项目中使用Sled库,一个为Rust生态设计的现代、高性能嵌入式数据库,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • 使用Cargo工具高效创建Rust项目

    使用Cargo工具高效创建Rust项目

    这篇文章主要介绍了使用Cargo工具高效创建Rust项目,本文有关Cargo工具的使用和Rust输入输出知识感兴趣的朋友一起看看吧
    2022-08-08
  • 详解在Rust语言中如何声明可变的static类型变量

    详解在Rust语言中如何声明可变的static类型变量

    在Rust中,可以使用lazy_static宏来声明可变的静态变量,lazy_static是一个用于声明延迟求值静态变量的宏,本文将通过一个简单的例子,演示如何使用 lazy_static 宏来声明一个可变的静态变量,需要的朋友可以参考下
    2023-08-08
  • Rust使用Channel实现跨线程传递数据

    Rust使用Channel实现跨线程传递数据

    消息传递是一种很流行且能保证安全并发的技术,Rust也提供了一种基于消息传递的并发方式,在rust里使用标准库提供的Channel来实现,下面我们就来学习一下如何使用Channel实现跨线程传递数据吧
    2023-12-12
  • 教你使用RustDesk 搭建一个自己的远程桌面中继服务器

    教你使用RustDesk 搭建一个自己的远程桌面中继服务器

    这篇文章主要介绍了RustDesk 搭建一个自己的远程桌面中继服务器,主要包括服务端安装和客户端配置方法,配置好相关操作输入控制码即可发起远程或文件传输,本文通过图文给大家讲解的非常详细,需要的朋友可以参考下
    2022-08-08
  • Rust如何使用config配置API

    Rust如何使用config配置API

    这篇文章主要介绍了Rust如何使用config配置API,这里记录了如何声明配置类型,读取配置,通过环境变量来覆盖配置值等开发中常见的动作,需要的朋友可以参考下
    2023-11-11
  • Rust之模式与模式匹配的实现

    Rust之模式与模式匹配的实现

    Rust中的模式匹配功能强大且灵活,它极大地提高了代码的表达力和可读性,本文主要介绍了Rust之模式与模式匹配,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Rust中Cargo的使用详解

    Rust中Cargo的使用详解

    Cargo 是 Rust 的构建系统和包管理器,⼤多数 Rustacean 们使⽤ Cargo 来管理他们的 Rust 项⽬,因为它可以为你处理很多任务,⽐如构建代码、下载依赖库并编译这些库,这篇文章主要介绍了Rust中Cargo的使用,需要的朋友可以参考下
    2022-11-11
  • 详解Rust 生命周期符号使用的方法和规律

    详解Rust 生命周期符号使用的方法和规律

    生命周期是 Rust 中处理引用和所有权的关键概念,通过正确使用生命周期符号和遵循相关规律,你可以编写出安全、高效的 Rust 代码,这篇文章主要介绍了Rust 生命周期符号使用的方法和规律,需要的朋友可以参考下
    2024-03-03

最新评论