Zend framework2 zf2:Zend客户端和cUrl不工作

Zend framework2 zf2:Zend客户端和cUrl不工作,zend-framework2,Zend Framework2,上面的截图是我正在使用的,我正在按照这里的文档进行操作 问题是,当我调用自己的curl函数时,它工作得很好,我得到了一个有效的响应。但是当我使用zend约定时,我总是得到一个401-未经授权。对于这两种方法,我使用的curl选项是相同的 有什么建议吗?我记得那个例子有问题,所以我用了另一个,这对我很有用: $adapter = new \Zend\Http\Client\Adapter\Curl(); $client = new \Zend\Http\Client($url);

上面的截图是我正在使用的,我正在按照这里的文档进行操作

问题是,当我调用自己的curl函数时,它工作得很好,我得到了一个有效的响应。但是当我使用zend约定时,我总是得到一个401-未经授权。对于这两种方法,我使用的curl选项是相同的


有什么建议吗?

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

$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();

Zend不允许覆盖选项CURLOPT_POSTFIELDS

你需要弄清楚如何覆盖它


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

因为Curl.php中的invalidoverwriteablecurlpoptions数组阻止了CURLOPT_POST字段和CURLOPT_POST,所以您要做的是在客户端上设置参数

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

$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);
使用Zend\Http\Client;
使用Zend\Http\Client\Adapter\Curl;
//一些后参数
$postParams=数组('per_page'=>25);
$adapter=newcurl();
//--在此处添加curl选项(不包括CURLOPT_POST和CURLOP_POST字段--
$client=新客户端($client)https://example.com/somePage');
$client->setAdapter($adapter);
$client->setMethod('POST');
$client->setParameterPost($postParams);
$response=$client->send($client->getRequest());
//输出响应
echo$response->getBody()“
”;
您甚至不需要创建请求对象,因为客户端类无论如何都会创建一个请求对象。在上面的代码中,我只是检索客户端使用getRequest方法创建的对象,然后将其传递给send方法

    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/>";