PHP Curl无法按预期工作

时间:2015-11-18 07:16:39

标签: php api curl

我想在php中发出一个请求,就像下面的请求一样,可以使用curl命令运行(在linux apt-get install curl上):

curl -H "X-SOCIALEDGE-ID: 6424a4b2a1b054d78ca1c9c69ca16016" \
    https://api-rc.<the_api_domain>:443/api/publishers?filter=email=<some_email>

哪些函数给我一个JSON响应。

但:     

class SocialEdgeApi {

    protected $api_key = "6424a4b2a1b054d78ca1c9c69ca16016";
    protected $api_url = "https://api-rc.<the_api_domain>:443/api/";

    private function getBasicCurl($endpoint) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->api_url.$endpoint);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'X-SOCIALEDGE-ID' => $this->api_key
        ]);

        return $ch;
    }

    private function doGetRequest($endpoint) {

        $ch = $this->getBasicCurl($endpoint);

        $head = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        curl_close($ch);

        var_dump($head);
        var_dump($httpCode);
        die();

        return $req;
    }

    public function checkInfluencerExists($email) {
        $http = $this->doGetRequest('publishers?filter=email='.$email);

        die('...'.$resp = $http->getResponseBody());
    }

}

然后在另一个文件或php -a:

中运行
require_once('SocialEdgeApi.php');
$a = new SocialEdgeApi();
$a->checkInfluencerExists('<some_email>');

返回403 Forbidden。这可能意味着标题设置不正确。

这些2&#34;如何卷曲&#34;请求有不同的行为/我在PHP版本中缺少/做错了什么?

我很抱歉不包含允许您使用此特定API进行测试的详细信息,但它是私有的第三方API。

2 个答案:

答案 0 :(得分:1)

看起来像CURL标题通常设置如下:

curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'X-SOCIALEDGE-ID: ' . $this->api_key,
]);

答案 1 :(得分:1)

正如EVILoptimist所指出的,卷曲的一个很好的替代方案是PHP的流上下文。我在这里描述的是为了方便那些偶然发现这一点的人。

你可以简单地执行这样的获取请求:

echo file_get_contents('http://www.google.com');

对于帖子请求,请参阅此处的示例:http://php.net/manual/en/context.http.php#context.http.example-post