$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未授权。我使用的卷曲选项对于两种方法都是相同的。
任何建议?
答案 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中删除此选项将解决您的问题。但是你需要找到不会干扰库的方式。