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

如何在Common Lisp中不依赖yason/cl-json向Kubernetes Web API发POST请求

在Common Lisp中不使用JSON库发送POST请求到指定API

需求说明

需要向地址 http://qr-restservices-test1.xxx/v1/qual 发送携带指定JSON数据的POST请求,且不能使用yason或cl-json等JSON处理库。

实现方案

我们可以使用Common Lisp常用的HTTP客户端库drakma来发送请求,同时手动构造符合要求的JSON字符串(因为禁止使用JSON序列化库)。

1. 加载drakma库

首先确保通过Quicklisp加载drakma:

(ql:quickload :drakma)

2. 静态JSON请求实现

如果参数不需要动态变化,直接写死JSON字符串即可:

(defun send-static-qual-request ()
  (let* ((target-url "http://qr-restservices-test1.xxx/v1/qual")
         ;; 手动构造JSON字符串,注意Lisp中双引号需用反斜杠转义
         (json-content "{
   \"requestId\":\"12345\",
   \"houseNumber\":\"5555\",
   \"streetName\":\"Erling garden\",
   \"city\":\"PHOENIX\",
   \"state\":\"AZ\",
   \"unit\":\"\",
   \"floor\":\"\",
   \"building\":\"\",
   \"postalCode\":\"0000\",
   \"qualProcessType\":\"GGG\",
   \"network\": \"JINX\",
   \"SrcSystem\": \"BLUE\"
}")
         (response (drakma:http-request target-url
                                        :method :post
                                        :content json-content
                                        :content-type "application/json")))
    ;; 打印响应结果
    (format t "请求响应内容: ~a~%" response)))

3. 动态参数请求实现

如果需要根据变量生成JSON,可以用format函数拼接字符串,避免手动修改的繁琐:

;; 生成符合格式的JSON字符串
(defun generate-qual-json (request-id house-num street city state zip qual-type network src-system)
  (format nil "{
   \"requestId\":\"~a\",
   \"houseNumber\":\"~a\",
   \"streetName\":\"~a\",
   \"city\":\"~a\",
   \"state\":\"~a\",
   \"unit\":\"\",
   \"floor\":\"\",
   \"building\":\"\",
   \"postalCode\":\"~a\",
   \"qualProcessType\":\"~a\",
   \"network\": \"~a\",
   \"SrcSystem\": \"~a\"
}" request-id house-num street city state zip qual-type network src-system))

;; 发送带动态参数的POST请求
(defun send-dynamic-qual-request (request-id house-num street city state zip qual-type network src-system)
  (let* ((target-url "http://qr-restservices-test1.xxx/v1/qual")
         (json-content (generate-qual-json request-id house-num street city state zip qual-type network src-system))
         (response (drakma:http-request target-url
                                        :method :post
                                        :content json-content
                                        :content-type "application/json")))
    (format t "请求响应内容: ~a~%" response)))

关键注意点

  • 手动构造JSON时必须保证格式正确:引号配对、逗号分隔、特殊字符(如双引号、反斜杠)需用\转义。
  • 必须设置Content-Type为application/json,否则服务器无法正确解析请求体。
  • 确保运行环境已安装Quicklisp,以便加载drakma库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:36:28