简而言之,我想创建一个直接使用Zend Framework 2骨架的HTTP基本身份验证的客户端。
客户端必须使用新消息授权并发送POST。
从onscratch开始(不完全 - 我有一个骨架F2)可以向我解释我需要开始的地方以及如何启动Zend_Rest_Client吗?
编辑: 我仔细查看了堆栈溢出,发现了similar question
现在我的IndexController.php文件如下所示:
<?php
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Http\Request;
use Zend\Http\Client;
use Zend\Stdlib\Parameters;
class IndexController extends AbstractActionController
{
public function indexAction()
{
$request = new Request();
$request->getHeaders()->addHeaders(array(
'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'
));
$someurl="http://apiurl/public_timeline.json";
$request->setUri($someurl);
$request->setMethod('GET');
$request->setPost(new Parameters(array('page' => 1)));
$client = new Client();
$response = $client->dispatch($request);
$data = json_decode($response->getBody(), true);
print_r($data);
return new ViewModel();
}
}
以上代码有效,但我想扩展此模块以支持需要身份验证的方法。怎么做?
答案 0 :(得分:2)
Zend的Http客户端仅支持基本HTTP authentication,您可以在调度请求之前轻松验证您的客户端,如下所示:
$client = new Client();
$client->setAuth('username', 'password');
$response = $client->dispatch($request);
对于Oauth2等更高级的身份验证机制,我强烈建议您使用某些第三方oauth客户端库而不是自己编写。 github上有很多开源和编写良好的Oauth2客户端库。 (for example)
当您从远程提供程序获取访问/刷新令牌(或客户端ID和密钥)时,只需在请求对象中设置此信息,如下所示:
$request->getHeaders()->addHeaders(array(
'Accept' => 'application/json',
'Authorization' => 'Bearer 1234567890abcdefghxxxx', // access token
));
$client = new Client();
$response = $client->dispatch($request);