PHP cURL GET请求:您无权访问此资源

时间:2019-03-25 15:49:26

标签: php curl

我面临各种各样的问题。我能够在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);

2 个答案:

答案 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)