我正在使用API来获取一些信息,遗憾的是这个API的文档很差。所以这是我的问题:要访问API,我首先需要进行POST验证(我通知我的访问令牌),然后我可以发出一些GET请求来检索数据。如果我使用Postman扩展(对于Chrome)它就像一个魅力,我首先POST验证URL,然后所有其他GET请求返回数据。但是,当我使用CURL执行此操作时,GET请求将返回“此请求已拒绝授权”,我始终首先发送身份验证POST,并始终返回true(成功)。
我不知道我做错了,无论如何,有些代码:
public function __construct() {
$this->token = 'token';
$this->ch = curl_init();
}
public function __destruct() {
curl_close($this->ch);
}
private function connect($url, $fields, $method = 'GET') {
curl_setopt($this->ch, CURLOPT_URL, $url .'?'. http_build_query($fields));
if($method == 'POST') {
curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($this->ch, CURLOPT_POST, 1);
} else {
curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, 'GET');
}
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($this->ch);
return $output;
}
private function authenticate() {
return $this->connect('Login', array(
'token' => $this->token
), 'POST');
}
public function execute($url, $fields, $method = 'GET') {
$this->authenticate();
return $this->connect($url, $fields, $method);
}
authenticate函数始终返回true,但execute函数返回401。
谢谢!
答案 0 :(得分:0)
if($method == "GET"){
curl_setopt($this->ch, CURLOPT_URL, $url .'?'. http_build_query($fields));
// This is by default GET request,
// so do you don't need to use CURLOPT_CUSTOMREQUEST anymore
}
else{
curl_setopt($this->ch, CURLOPT_URL, $url);
}
答案 1 :(得分:0)
知道了!我没有意识到在第一个POST中创建了一个cookie,这就是问题所在。为了解决这个问题,我在connect函数中添加了这些行:
$tmp_fname = tempnam("./","COOKIE");
curl_setopt($this->ch, CURLOPT_COOKIEFILE, $tmp_fname);
curl_setopt($this->ch, CURLOPT_COOKIEJAR, $tmp_fname);
现在有效!