You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust客户端向Node.js服务器发送HTTP数据失败,请求排查

Rust客户端与Node.js服务器数据交互问题解决

问题背景

Rust客户端向Node.js服务器的/register接口发送HWID,但服务器持续输出[!] HWID not found.,无法正确识别请求中的HWID数据。客户端已确认HWID字符串正常输出,但服务器接收不到对应字段。

问题原因

服务器通过bodyParser.json()和bodyParser.urlencoded()解析请求体,期望接收JSON格式或表单格式的请求数据,但当前Rust客户端仅直接发送纯字符串作为请求体,既未设置正确的Content-Type请求头,也未将HWID封装为服务器期望的键值对结构(如{ "hwid": "xxx" }),导致服务器无法从req.body中提取hwid字段。

同时,Rust客户端代码存在一处语法错误:match ex_code::&lt;u8&gt;()应为match ex_code.parse::<u8>(),否则无法将响应文本转为u8类型。

解决方案

修改Rust客户端代码,将请求体封装为JSON格式,并设置正确的请求头:

1. 添加依赖(若未安装)

在Cargo.toml中添加serde相关依赖,用于JSON序列化:

[dependencies]
reqwest = { version = "0.11", features = ["json"] }
serde = { version = "1.0", features = ["derive"] }

2. 修改客户端代码

use reqwest::Client;
use serde::Serialize;

const REQUEST_URL: &str = "http://127.0.0.1:3000/register";

// 定义与服务器期望匹配的结构体
#[derive(Serialize)]
struct RegisterRequest {
    hwid: String,
}

pub async fn register(hwid: &str) -> u8 {
    let client = Client::new();
    println!("Sending HWID: {}", hwid);
    
    let request_body = RegisterRequest {
        hwid: hwid.to_string(),
    };

    loop {
        let response = match client.post(REQUEST_URL)
            // 自动设置Content-Type为application/json,并序列化结构体
            .json(&request_body)
            .send()
            .await {
                Ok(res) => res,
                Err(_) => continue,
            };

        if response.status().is_success() {
            match response.json::<serde_json::Value>().await {
                Ok(data) => {
                    // 从响应JSON中提取exCode字段
                    match data["exCode"].as_u64() {
                        Some(code) => return code as u8,
                        None => continue,
                    }
                },
                Err(_) => continue,
            };
        }
    }
}

关键修改点

  • 定义RegisterRequest结构体,通过serde::Serialize实现JSON序列化,确保请求体格式为{ "hwid": "xxx" }
  • 使用.json(&request_body)替代.body(...),reqwest会自动设置Content-Type: application/json请求头,并完成序列化
  • 修复响应解析逻辑:改用response.json()直接解析JSON响应,提取exCode字段,替代原错误的ex_code::&lt;u8&gt;()写法

验证说明

修改后,Rust客户端发送的请求将符合服务器的解析要求,服务器能正确从req.body.hwid获取到HWID值,不再输出HWID not found.的错误提示,正常执行后续业务逻辑。

内容的提问来源于stack exchange,提问作者Nayrosk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:55:56