为什么 Common Lisp 著名的库 Dexador 不适用于这种 HTTP POST 请求情况?这是一个错误还是我错过了什么?
Why is Common Lisp famous library Dexador not working for this HTTP POST request case? Is it a bug or did I miss something?
我正在使用 SBCL、Emacs、Slime 和 Dexador。我也在 Udemy 上观看关于 Postman 的这门课程。
在某个时候,讲师提出了一个使用基本身份验证的 POST 请求。总结如下图:
POST 请求是在地址 https://simple-tool-rental-api.glitch.me/api-clients
发出的。另外提交一条JSON格式的正文:
{
"clientName": "Postman",
"clientEmail": "pedro@gmail.com"
}
作为回复,服务器响应:
{
"accessToken": "079e7bb6d3832c0d7054ae0e1146d6ed3277836fefd2e0aa9e5d7d207945e17f"
}
我尝试使用名为 Dexador 的著名库并使用文档说明来做同样的事情:
CL-USER>(dex:post "https://simple-tool-rental-api.glitch.me/api-clients"
:content '(("clientName" . "Postman") ("clientEmail" . "pete@example.com")))
不幸的是,Slime returns 一条错误消息指示 400 错误请求:
An HTTP request to "https://simple-tool-rental-api.glitch.me/api-clients" returned 400 bad request.
{"error":"Invalid or missing client name."}
这是一个错误吗?我错过了什么吗?
一个工作示例:
(dex:request "https://simple-tool-rental-api.glitch.me/api-clients"
:method :post
:headers '(("Content-Type" . "application/json"))
:content "{\"clientName\":\"Postman\",
\"clientEmail\": \"pete@example.com\"}"
:verbose t)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
POST /api-clients HTTP/1.1
User-Agent: Dexador/0.9.15 (SBCL 1.4.5.debian); Linux; 5.0.0-31-generic
Host: simple-tool-rental-api.glitch.me
Accept: */*
Content-Type: application/json
Content-Length: 83
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
HTTP/1.1 201 Created
Date: Tue, 05 Apr 2022 12:44:55 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 82
Connection: keep-alive
x-powered-by: Express
etag: W/"52-egRRCktqEOIEh9dS2uY8rWUiyfY"
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"{\"accessToken\":\"7e559ebee8ff889054346dbbd727c1bb9b9d55123fb5bd49686337e8829f8b78\"}"
201
#<HASH-TABLE :TEST EQUAL :COUNT 6 {1003C05373}>
#<QURI.URI.HTTP:URI-HTTPS https://simple-tool-rental-api.glitch.me/api-clients>
#<CL+SSL::SSL-STREAM for #<FD-STREAM for "socket 192.168.1.53:39148, peer: 18.205.205.44:443" {10035F4C33}>>
我使用“pete”电子邮件,因为 pedro one“已经注册”。
我使用 hand-formatted JSON 发送 Content-Type
或 application/json
的凭据,我确定是哪种格式。我想在 Postman 屏幕截图中使用“原始”content-type,但不确定 alist 是否适合它。
我认为通过更好地了解示例 API,您可以整理出另一个 content-type 用于 alist 正文内容。
我正在使用 SBCL、Emacs、Slime 和 Dexador。我也在 Udemy 上观看关于 Postman 的这门课程。
在某个时候,讲师提出了一个使用基本身份验证的 POST 请求。总结如下图:
POST 请求是在地址 https://simple-tool-rental-api.glitch.me/api-clients
发出的。另外提交一条JSON格式的正文:
{
"clientName": "Postman",
"clientEmail": "pedro@gmail.com"
}
作为回复,服务器响应:
{
"accessToken": "079e7bb6d3832c0d7054ae0e1146d6ed3277836fefd2e0aa9e5d7d207945e17f"
}
我尝试使用名为 Dexador 的著名库并使用文档说明来做同样的事情:
CL-USER>(dex:post "https://simple-tool-rental-api.glitch.me/api-clients"
:content '(("clientName" . "Postman") ("clientEmail" . "pete@example.com")))
不幸的是,Slime returns 一条错误消息指示 400 错误请求:
An HTTP request to "https://simple-tool-rental-api.glitch.me/api-clients" returned 400 bad request.
{"error":"Invalid or missing client name."}
这是一个错误吗?我错过了什么吗?
一个工作示例:
(dex:request "https://simple-tool-rental-api.glitch.me/api-clients"
:method :post
:headers '(("Content-Type" . "application/json"))
:content "{\"clientName\":\"Postman\",
\"clientEmail\": \"pete@example.com\"}"
:verbose t)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
POST /api-clients HTTP/1.1
User-Agent: Dexador/0.9.15 (SBCL 1.4.5.debian); Linux; 5.0.0-31-generic
Host: simple-tool-rental-api.glitch.me
Accept: */*
Content-Type: application/json
Content-Length: 83
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
HTTP/1.1 201 Created
Date: Tue, 05 Apr 2022 12:44:55 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 82
Connection: keep-alive
x-powered-by: Express
etag: W/"52-egRRCktqEOIEh9dS2uY8rWUiyfY"
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"{\"accessToken\":\"7e559ebee8ff889054346dbbd727c1bb9b9d55123fb5bd49686337e8829f8b78\"}"
201
#<HASH-TABLE :TEST EQUAL :COUNT 6 {1003C05373}>
#<QURI.URI.HTTP:URI-HTTPS https://simple-tool-rental-api.glitch.me/api-clients>
#<CL+SSL::SSL-STREAM for #<FD-STREAM for "socket 192.168.1.53:39148, peer: 18.205.205.44:443" {10035F4C33}>>
我使用“pete”电子邮件,因为 pedro one“已经注册”。
我使用 hand-formatted JSON 发送 Content-Type
或 application/json
的凭据,我确定是哪种格式。我想在 Postman 屏幕截图中使用“原始”content-type,但不确定 alist 是否适合它。
我认为通过更好地了解示例 API,您可以整理出另一个 content-type 用于 alist 正文内容。