使用json文章的摘要authentication的curl命令

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

我有一个POST路由做摘要身份validation,试图应用程序JSON的内容types。

我可以用摘要命中GET路由,没有问题,我可以使用基本身份validation来打开POST路由,但是当我尝试使用摘要身份validation执行POST时,会得到400 – 错误请求。 它看起来像curl把内容types放在初始摘要请求(内容长度为0,所以它知道足够的不发送初始digest-auth请求的JSON正文),我的一方(expression)失败无效的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魔术,只是在实际的数据请求中添加内容types。

作为参考,虽然我不认为它有帮助,但是这是同一个电话的BASIC成绩单:

 $ 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不要在最初的请求中发送内容types(我不认为这有什么魔力)。

然而,我可以告诉你,问题的根本原因是Node + Express(连接)通过bodyParser发送初始摘要请求,并且因为应用程序/ json头在那里它试图parsing正文(这是空的) 。 就个人而言,我不认为如果主体是空的,expression式就会吓倒,而只是返回一个空的JSON结构(我的工作在下面)。

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

我的解决方法(连接/ lib /中间件/ json.js:70)

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