如何正确使用cURL定义基本的HTTPauthentication?

我正在学习Apigility( Apigility docu – > REST Service Tutorial ),并尝试通过cURL发送带有基本身份validation的POST请求:

$ curl -X POST -i -H "Content-Type: application/hal+json" -H "Authorization: Basic YXBpdXNlcjphcGlwd2Q=" http://apigilityhw.sandbox.loc/status 

YXBpdXNlcjphcGlwd2Q=是我的证书apiuser:apipwd的基础64编码的string。 凭证保存在/data/htpasswdapiuser:$apr1$3J4cyqEw$WKga3rQMkxvnevMuBaekg/ )中。

看起来像这样:

 HTTP/1.1 401 Unauthorized Server: nginx/1.4.7 Date: Mon, 22 Sep 2014 07:48:47 GMT Content-Type: application/problem+json Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.5.12-1~dotdeb.1 WWW-Authenticate: Basic realm="api" 

这里的错误在哪里? 如何得到它的工作?

 curl -u username:password http:// curl -u username http:// 

从文档页面:

-u,–user <user:password>

指定用于服务器身份validation的用户名和密码。 覆盖-n,–netrc和–netrc-可选。

如果您只是指定用户名,curl会提示input密码。

用户名和密码在第一个冒号中分开,这使得用户名中不能使用冒号。 密码仍然可以。

在基于Windows的服务器上使用Kerberos V5时,应在用户名中包含Windows域名,以便服务器成功获取Kerberos票据。 如果您不这样做,则初始身份validation握手可能会失败。

使用NTLM时,可以简单地将用户名指定为用户名,如果在设置中有单个域和目录林,则不指定域。

要指定域名,请使用Down-Levellogin名或UPN(用户主体名称)格式。 例如,分别为EXAMPLE \ user和user@example.com。

如果您使用启用了Windows SSPI的curl二进制文件并执行Kerberos V5,Negotiate,NTLM或摘要式身份validation,则可以通过指定一个冒号来指定curl从您的环境中select用户名和密码:“-u:” 。

如果多次使用此选项,则将使用最后一个。

http://curl.haxx.se/docs/manpage.html#-u

请注意,您不需要 – --basic标志,因为它是默认值。

使用OAuth或其他身份validation服务时,您通常也可以将查询string中的访问令牌发送到查询string中,而不是授权标头中,如下所示:

 GET https://www.example.com/v1/users/1?access_token=abcdefghijklmnopqrstuvwxyz1234567890ABCD