POST进行身份验证,然后获取GET信息

时间:2014-02-02 14:51:46

标签: php api authentication curl

我正在使用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。

谢谢!

2 个答案:

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

现在有效!