Я использую SBCL, Emacs, Slime и Dexador. Я также смотрю этот курс на Udemy о Почтальон.
В какой-то момент инструктор представляет запрос POST, который использует обычную проверку подлинности. Его резюмирует следующая картинка:
POST-запрос делается по адресу https://simple-tool-rental-api.glitch.me/api-clients
. Кроме того, отправляется сообщение в виде тела в формате JSON:
{
"clientName": "Postman",
"clientEmail": "[email protected]"
}
В ответ сервер отвечает:
{
"accessToken": "079e7bb6d3832c0d7054ae0e1146d6ed3277836fefd2e0aa9e5d7d207945e17f"
}
Я попытался сделать то же самое, используя известную библиотеку Дексадор и инструкции по документации:
CL-USER>(dex:post "https://simple-tool-rental-api.glitch.me/api-clients"
:content '(("clientName" . "Postman") ("clientEmail" . "[email protected]")))
К сожалению, Slime возвращает сообщение об ошибке, указывающее на неверный запрос 400:
An HTTP request to "https://simple-tool-rental-api.glitch.me/api-clients" returned 400 bad request.
{"error":"Invalid or missing client name."}
Это ошибка? Я что-то пропустил?
Вы показываете адрес [email protected]
и используете его в pete
. Вы уверены в полномочиях? (вы пробовали их с другим инструментом?)
Будет ли разница между телом RAW (захват) и dex:post, использующим x-www-form-urlencoded
?
Я использовал pedro
и pete
, потому что нужно было иметь два разных письма. После использования он становится зарегистрированным.
Рабочий пример:
(dex:request "https://simple-tool-rental-api.glitch.me/api-clients"
:method :post
:headers '(("Content-Type" . "application/json"))
:content "{\"clientName\":\"Postman\",
\"clientEmail\": \"[email protected]\"}"
: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 «уже зарегистрирован».
Я использую отформатированный вручную JSON для отправки учетных данных с Content-Type
из application/json
, в каком формате я уверен. Я хотел использовать «сырой» тип контента, как на снимке экрана с почтальоном, но не был уверен, что алист хорошо с ним справляется.
Я думаю, что, лучше зная пример API, вы могли бы разобраться с другим типом контента для использования с содержимым тела alist.
Вы говорите, что API использует обычную аутентификацию, но не отправляете никаких учетных данных (используя
:basic-auth '("username" . "password")
)