我以前在终端使用curl命令访问php网页来测试网页中的一些API。它工作正常。
例如:
curl www.somesite.com -d parmetername=value
现在这个页面有基本的http身份验证。我知道我只需要添加-u来提供用户名和密码。我也用谷歌搜索,几乎每个人都建议做同样的事情:
curl -u username:password www.somesite.com -d parmetername=value
curl --user username:password www.somesite.com -d parmetername=value
或
curl http://username:password@www.somesite.com -d parmetername=value
我试过了他们两个,但都没有。我得到了与以下相同的错误消息:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<p>Additionally, a 401 Authorization Required
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 Server at www.somesite.com Port 80</address>
</body></html>
我试图通过浏览器访问该网站。在提示窗口中输入用户名和密码后。我可以访问这个网站。
有谁知道这里发生了什么? 谢谢。
答案 0 :(得分:0)
当我遇到这个问题时,事实证明服务器不会接受认证方案&#39; Basic&#39;但是curl使用&#39; Basic&#39;除非另有说明。
查看curl关于身份验证方案的命令行选项。您可以使用--basic
,--digest
,--ntlm
,--negotiate
和--anyauth
。有关详细信息,请参阅curl的手册页。
虽然--anyauth
或--negotiate
听起来像curl可以与服务器协商正确的身份验证方法,但它们都不适合我。相反,我必须明确使用--digest
,如下:
curl --digest -u username:password -d parm1=value1&parm2=value2&submit=true https://www.somesite.com