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

如何在D语言中发送带JSON数据的HTTP POST请求及编译运行

在D语言中发送JSON POST请求的完整流程

下面是完成需求的具体实现方法,包含代码示例和操作说明:

1. 定义JSON Payload

D语言支持两种方式定义JSON数据:

  • 结构化构建(适合动态生成):用std.json模块的Json对象逐层组装:
    import std.json;
    
    auto payload = Json([
        "name": Json("Alice"),
        "age": Json(30),
        "hobbies": Json(["reading", "coding"])
    ]);
    string jsonStr = payload.toString();
    
  • 直接字符串定义(适合固定格式):结合多行字符串使用更便捷(见下文)。

2. 使用多行字符串

D语言用三个双引号"""包裹多行字符串,内部双引号无需转义:

string jsonPayload = """
{
    "name": "Bob",
    "age": 25,
    "hobbies": ["gaming", "hiking"]
}
""";

3. 指定HTTP请求头

借助std.net.curl库的HTTPRequest对象设置请求头,比如必填的Content-Type:

import std.net.curl;

HTTPRequest req;
req.headers["Content-Type"] = "application/json";
req.headers["Accept"] = "application/json"; // 可选,指定接受的响应格式

4. 发送携带JSON的POST请求

可以直接调用post函数,或通过HTTPRequest配置后发送:

string url = "https://httpbin.org/post"; // 示例API地址

// 方式一:简化调用
string response = post(url, jsonPayload, req.headers);

// 方式二:自定义请求配置
req.url = url;
req.method = HTTPMethod.POST;
req.setData(jsonPayload);
auto response = cast(string)req.perform();

5. 接收并打印响应

直接将响应字符串输出到控制台即可:

import std.stdio;

writeln("=== 服务器响应 ===");
writeln(response);

完整代码示例

将所有步骤整合到json_post.d文件中:

import std.json;
import std.net.curl;
import std.stdio;

void main()
{
    // 定义JSON Payload(多行字符串示例)
    string jsonPayload = """
    {
        "name": "Charlie",
        "age": 35,
        "hobbies": ["traveling", "photography"]
    }
    """;

    // 设置请求头
    HTTPRequest req;
    req.headers["Content-Type"] = "application/json";
    req.headers["Accept"] = "application/json";

    // 发送请求并处理异常
    string url = "https://httpbin.org/post";
    string response;
    try
    {
        response = post(url, jsonPayload, req.headers);
    }
    catch (Exception e)
    {
        writeln("请求失败:", e.msg);
        return;
    }

    // 打印响应
    writeln("=== 服务器响应 ===");
    writeln(response);
}

6. 编译运行代码

D语言常用编译器有dmd(官方编译器)和ldc2(LLVM后端,性能更优):

  • 用dmd编译运行:
    # 编译
    dmd json_post.d -of=json_post
    # 运行(Linux/macOS)
    ./json_post
    # 运行(Windows)
    json_post.exe
    
  • 用ldc2编译运行:
    # 编译
    ldc2 json_post.d -of=json_post
    # 运行命令同上
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:13:27