Zend framework2 zf2:Zend客户端和cUrl不工作
上面的截图是我正在使用的,我正在按照这里的文档进行操作 问题是,当我调用自己的curl函数时,它工作得很好,我得到了一个有效的响应。但是当我使用zend约定时,我总是得到一个401-未经授权。对于这两种方法,我使用的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);
有什么建议吗?我记得那个例子有问题,所以我用了另一个,这对我很有用:
$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/>";