zf2:Zend Client和cUrl无法正常工作

时间:2012-12-14 02:28:45

标签: zend-framework2

$adapter = new \Zend\Http\Client\Adapter\Curl();

    $client = new \Zend\Http\Client($url);
    $client->setAdapter($adapter);
    $client->setMethod('POST');
    $adapter->setOptions(array(
        'curloptions' => array(
                            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => $data,
            CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
            CURLOPT_USERPWD => "username:password",
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYPEER => FALSE,
            CURLOPT_SSL_VERIFYHOST => FALSE,

        )
    ));
  $client->send();

以上内容与我正在使用的内容相关,我正在关注此处的文档http://framework.zend.com/manual/2.0/en/modules/zend.http.client.adapters.html

问题是,当我自己做curl函数调用它工作正常,我得到一个有效的响应。但是当我使用zend惯例时,我会继续获得401未授权。我使用的卷曲选项对于两种方法都是相同的。

任何建议?

3 个答案:

答案 0 :(得分:3)

由于CURL.php中的invalidOverwritableCurlOptions数组阻止了CURLOPT_POSTFIELDS和CURLOPT_POST,因此您要做的是在客户端上设置参数。

在Zend / Http / Client中使用setParameterPost方法,如下所示:

    use Zend\Http\Client;
    use Zend\Http\Client\Adapter\Curl;

    //some post params
    $postParams = array('per_page' => 25);

    $adapter = new Curl();
    // -- add your curl options here (excluding CURLOPT_POST and CURLOP_POSTFIELDS --

    $client = new Client('https://example.com/somePage');
    $client->setAdapter($adapter);
    $client->setMethod('POST');
    $client->setParameterPost($postParams);
    $response = $client->send($client->getRequest());

    //output the response
    echo $response->getBody()."<br/>";

您甚至不需要创建Request对象,因为Client类仍会创建一个Request对象。在上面的代码中,我只是检索客户端使用getRequest方法创建的那个,然后将其传递给send方法。

答案 1 :(得分:2)

我记得那个例子有问题所以我用了另一个,这对我有用:

$request = new Request();
$request->setUri($url);
$request->setMethod('POST');

$client = new Client();
$adapter = new \Zend\Http\Client\Adapter\Curl();
$client->setAdapter($adapter);

$adapter->setOptions(array(
    'curloptions' => array(
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
        CURLOPT_USERPWD => "username:password",
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_SSL_VERIFYPEER => FALSE,
        CURLOPT_SSL_VERIFYHOST => FALSE,
    )
));

$response = $client->dispatch($request);

答案 2 :(得分:0)

Zend不允许覆盖选项CURLOPT_POSTFIELDS。

您需要弄清楚如何覆盖它。

从Zend库的curl.php中的invalidOverwritableCurlOptions中删除此选项将解决您的问题。但是你需要找到不会干扰库的方式。