将GET值放在PHP Curl请求标头中

时间:2016-04-13 08:37:08

标签: php curl

我要求的API需要GET HTTP方法

我想避免像

这样的事情 例如

domain.com/api/v1/module/user?access_token=er78e9wr7fasf7s9a8fsd7fa8f7sa8f

我宁愿能够请求

domain.com/api/v1/module/user 并在标题中设置access_token值,我知道你可以用post做到这一点,但我想为GET方法做这个。

我目前有以下

    public function fetch() 
    {
        $response = json_decode(
            $this->prepareRequest(
                new \Web\Curl\Wrapper,
                $this->prepareRequestURL()
            )->execute()
        );
    }
    private function prepareRequestURL()
    {
        return $this->apiConfig->getBaseDomain() . $this->apiConfig->getUserSelfURL();
    }

    private function prepareRequest(\Web\Curl\Wrapper $curlWrapper, $url)
    {
        $curlWrapper->init($url);
        $curlWrapper->setOption(CURLOPT_RETURNTRANSFER, 1);
        $curlWrapper->setOption(CURLOPT_HTTPHEADER, array(
            $this->apiConfig->getAccessTokenKey() => $_SESSION[$this->apiConfig->getAccessTokenKey()]
        ));
        return $curlWrapper;
    }

我的卷曲包装类

private $curl;

public function init($requestLocation = null)
{
    $this->curl = curl_init($requestLocation);
}

public function preparePost($postData)
{
    $this->setOption(CURLOPT_POST, 4);
    $this->setOption(CURLOPT_POSTFIELDS, $postData);
    $this->setOption(CURLOPT_SSL_VERIFYPEER, false);
    $this->setOption(CURLOPT_RETURNTRANSFER, true);
}

public function execute()
{
    return curl_exec($this->curl);
}

public function setOption($option, $value)
{
    curl_setopt($this->curl, $option, $value);
}

1 个答案:

答案 0 :(得分:1)

  

...并在标题中设置access_token值,我知道你可以这样做   这有帖子,但我想为GET方法做这个。

对于任何类型的请求(POSTGET等,以相同的方式设置HTTP标头。

您的代码的问题是您以错误的方式设置标头。 CURLOPT_HTTPHEADER选项需要数字索引数组,而不是关联数组。此外,每个数组元素都应该是"key: value"格式的字符串。

因此,您必须在prepareRequest方法中进行此类更改:

...
$key = $this->apiConfig->getAccessTokenKey();
$value = $_SESSION[$token];
$curlWrapper->setOption(CURLOPT_HTTPHEADER, array(
    "$key: $value"
));
...