如何使用request.el与本地服务器通信
How to use request.el to communicate with local server
我正在尝试使用 request.el 包将 post 数据发送到侦听端口 8765 的本地服务器,但我没有成功——我总是收到空响应。我想知道我是否对端口号做错了什么---我在 request.el 的文档中没有看到任何相关示例。或者我没有为服务器期望的 json 数据使用正确的语法。详情如下:
我在我的本地机器上有一个本地服务器 运行 并在端口 8765 上侦听。它接受 json 对象指示它应该执行哪个操作。例如,我可以使用 curl 获取服务器的版本号,如下所示:
curl localhost:8765 -X POST -d "{\"action\":\"version\", \"version\":6}"
服务器的响应是:
{"result": 6, "error": null}
我的 curl 等效 request.el 函数是:
(request
"http://127.0.0.1:8765"
:type "POST"
:data '(("action" . "version") ("version" . 6))
:parser 'buffer-string
:complete (cl-function
(lambda (&key response &allow-other-keys)
(message "Response is: %S" (request-response-data response)))))
我希望得到相同的 JSON 对象 curl returns,但我得到的是空值:
Response is: "null"
换句话说,服务器似乎不理解请求。我想知道我做错了什么?
您目前正在以默认格式发布数据,即查询字符串:
action=version&version=6
但您应该发布 JSON 数据:
{"action":"version","version":6}
更改您的 :data
规范以使用 JSON 编码:
:data (json-encode '(("action" . "version") ("version" . 6)))
我正在尝试使用 request.el 包将 post 数据发送到侦听端口 8765 的本地服务器,但我没有成功——我总是收到空响应。我想知道我是否对端口号做错了什么---我在 request.el 的文档中没有看到任何相关示例。或者我没有为服务器期望的 json 数据使用正确的语法。详情如下:
我在我的本地机器上有一个本地服务器 运行 并在端口 8765 上侦听。它接受 json 对象指示它应该执行哪个操作。例如,我可以使用 curl 获取服务器的版本号,如下所示:
curl localhost:8765 -X POST -d "{\"action\":\"version\", \"version\":6}"
服务器的响应是:
{"result": 6, "error": null}
我的 curl 等效 request.el 函数是:
(request
"http://127.0.0.1:8765"
:type "POST"
:data '(("action" . "version") ("version" . 6))
:parser 'buffer-string
:complete (cl-function
(lambda (&key response &allow-other-keys)
(message "Response is: %S" (request-response-data response)))))
我希望得到相同的 JSON 对象 curl returns,但我得到的是空值:
Response is: "null"
换句话说,服务器似乎不理解请求。我想知道我做错了什么?
您目前正在以默认格式发布数据,即查询字符串:
action=version&version=6
但您应该发布 JSON 数据:
{"action":"version","version":6}
更改您的 :data
规范以使用 JSON 编码:
:data (json-encode '(("action" . "version") ("version" . 6)))