gpt4 book ai didi

node.js - 使用 json post 进行摘要身份验证的 Curl 命令

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:22 25 4
gpt4 key购买 nike

(使用node.js、express、passport-http)

我有一个 POST 路由进行摘要身份验证,尝试 application-json 内容类型。

我可以使用摘要访问 GET 路由,没有任何问题,并且可以使用基本身份验证访问 POST 路由,没有问题,但是当我尝试使用摘要身份验证执行 POST 时,我收到 400 - 错误请求。看起来curl将内容类型放在初始摘要请求上(内容长度为0,因此它知道足够多不要在初始摘要验证请求上发送json正文),而我这边(express)失败了无效的 json(空正文):

$ curl  -v --digest  -X POST --data @body.json --user org2user2:lameduck -H "content-type: application/json"  http://127.0.0.1:3002/user

* About to connect() to 127.0.0.1 port 3002 (#0)
* Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 3002 (#0)
* Server auth using Digest with user 'org2user2'
> POST /user HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: 127.0.0.1:3002
> Accept: */*
> content-type: application/json
> Content-Length: 0
>
< HTTP/1.1 400 Bad Request
< X-Powered-By: Express
< Content-Type: text/plain
< Date: Thu, 21 Mar 2013 15:33:10 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked

如果没有这个,我似乎无法弄清楚发送摘要初始数据包的curl魔法,只能在随后的实际数据请求中添加内容类型。

作为引用,虽然我认为这没有帮助,但以下是同一调用的基本记录:

$ curl  -v --basic  -X POST --data @body.json --user org2user2:lameduck -H "content-type: application/json"  http://127.0.0.1:3002/user
* About to connect() to 127.0.0.1 port 3002 (#0)
* Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 3002 (#0)
* Server auth using Basic with user 'org2user2'
> POST /user HTTP/1.1
> Authorization: Basic b3JnMnVzZXIyOmxhbWVkdWNr
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: 127.0.0.1:3002
> Accept: */*
> content-type: application/json
> Content-Length: 48
>
* upload completely sent off: 48 out of 48 bytes
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 51
< Date: Thu, 21 Mar 2013 15:43:48 GMT
< Connection: keep-alive
<
{
"this": "is working",
"that": "is annoying"
* Connection #0 to host 127.0.0.1 left intact
}* Closing connection #0

任何帮助都会很棒。

最佳答案

我也遇到了同样的问题。我无法回答您关于命令行魔术告诉 CURL 不要在初始请求上发送内容类型的问题(我不认为有任何魔术)。

但是,我可以告诉您问题的根本原因是 Node+Express(connect) 通过 bodyParser 发送初始摘要请求,并且由于 application/json header 在那里,它尝试解析正文(为空)。就我个人而言,我认为如果 body 为空,express 不应该 panic ,而只是返回一个空的 JSON 结构(我的工作如下)。

将来可能会有更好的(官方)解决方法,因为这个特定问题现在正在 github 上讨论(1 天前) https://github.com/senchalabs/connect/issues/415

我的解决方法(connect/lib/middleware/json.js:70)

if (0 == buf.length) {
// return next(400, 'invalid json, empty body');
req.body = {};
return next();
}

关于node.js - 使用 json post 进行摘要身份验证的 Curl 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com