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

Lisp发送JSON请求至远程服务器遇400错误求协助

问题排查与解决方案

问题根源

你收到400 Bad Request的核心原因有两个:

  • 服务器明确要求JSON格式的请求体,但你使用的format-msg函数生成的是XML数据,格式完全不匹配
  • 发送请求时可能未设置Content-Type: application/json请求头,服务器无法正确解析请求内容

正确实现步骤(Common Lisp)

我们使用drakma(HTTP客户端库)和cl-json(JSON序列化库)来实现正确的JSON请求发送,这两个是Common Lisp生态中常用的成熟工具。

1. 安装依赖库

如果使用Quicklisp包管理器,直接在REPL中执行:

(ql:quickload '(drakma cl-json))

2. 构造请求数据结构

把目标JSON转换成Lisp的关联列表(alist),示例如下:

(defparameter *request-data*
  '(("requestId" . "12345")
    ("houseNumber" . "5555")
    ("streetName" . "Erling garden")
    ("city" . "PHOENIX")
    ("state" . "AZ")
    ("unit" . "")
    ("floor" . "")
    ("building" . "")
    ("postalCode" . "0000")
    ("qualProcessType" . "GGG")
    ("network" . "JINX")
    ("SrcSystem" . "BLUE")))

3. 序列化为JSON字符串

用cl-json:encode-json-to-string把Lisp数据转换成标准JSON格式:

(defparameter *json-body* (cl-json:encode-json-to-string *request-data*))

4. 发送HTTP POST请求

使用drakma:http-request发送请求,指定正确的URL、请求方法、请求体和请求头:

(let ((response
       (drakma:http-request "你的远程服务器接口URL"
                            :method :post
                            :content *json-body*
                            :content-type "application/json")))
  (format t "服务器响应: ~a~%" response))

关键注意点

  • 替换代码中的"你的远程服务器接口URL"为实际的接口地址
  • 可以通过打印*json-body*检查序列化后的字符串是否和目标JSON格式完全一致
  • 如果服务器需要额外请求头(比如认证信息),可通过:additional-headers参数添加,示例:
    :additional-headers '(("Authorization" . "Bearer your-auth-token"))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:19:52