我面临各种各样的问题。我能够在POSTman中获得响应,但在使用PHP代码时却出现了以下错误。
您无权访问此资源
代码如下:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml','Accept: application/xml'));
$data = curl_exec($ch);
curl_close($ch);
答案 0 :(得分:0)
不幸的是,不同的cURL版本的行为略有不同,因此没有一个有效的答案,而是几种适用于不同cURL版本的方法。
这里有两个建议:
来自Problems with username or pass with colon when setting CURLOPT_USERPWD
尝试添加curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
,或者改为添加CURLAUTH_BASIC
。
应该总是有效的东西
如果这样做没有帮助,请直接将用户名和密码添加到网址中,例如https://user:pass@host.com/path
。
您不应该关闭证书验证,而是获取有效的证书,使用letencrypt是免费的。
答案 1 :(得分:0)
<?php
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . base64_encode($password)); //here is the change
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml','Accept: application/xml'));
$data = curl_exec($ch);
curl_close($ch);
这确实是一个远景,我知道,但是我已经看到很多API都可以这样工作,并且由于OP似乎没有API文档,因此我将以此为答案,以防它帮助他解决他的问题。
如果上述方法不起作用,请尝试也base64_encode($username)