我正在尝试创建一个简单的PHP脚本,该脚本在两个不同的域上调用两个不同的REST API。两种服务都是HTTPS,需要身份验证。当我从终端进行卷曲时,我得到了两个域的JSON响应,并且一切运行正常:
curl-用户“ myuser:mypassword” https://www.example.com/rest/api/2/projects
请注意,这是一个GET,而不是POST。
奇怪的是,当我从PHP脚本尝试完全相同的curl命令时,它们都不起作用。
这会发生什么:
第二个域以JSON返回此错误:
{“错误”:[{“上下文”:null,“消息”:“不允许您访问此资源”,“ exceptionName”:“ com.atlassian.stash.exception.AuthorisationException”}]}
这是没有发生的事情:
即使输入了错误的用户名或密码,两种服务的行为也将完全相同。
对我来说,可疑的是两个域都不对我的呼叫进行身份验证,这使我认为我的代码或php curl库中存在问题。
这是我的代码:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $link3);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$encodedAuth = base64_encode($username.":".$password);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authentication : Basic ".$encodedAuth));
curl_setopt($curl, CURLOPT_USERPWD, $username.":".$password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,true);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
$status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); //get status code
我知道其中有些是多余的,但是我想尝试一切,但没有任何效果。有任何想法吗?
我的环境:
当前代码混合了各种方法,并且以一种冲突的方式进行:
Authorization:
而未命名Authentication:
CURLOPT_HTTPAUTH, CURLAUTH_ANY
尝试与服务器进行协商,不应该(同样没有工作卷曲命令行)只需使用:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $link3);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, $username.":".$password);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,true);
# for debugging/non-prod
#curl_setopt($curl, CURLOPT_VERBOSE, true);
#curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句