可以一起使用Zend_Http_Client()和Zend_Rest_Client()

时间:2014-04-28 13:19:25

标签: php rest zend-framework authentication

我目前正在使用 Zend Framework 在PHP中使用 REST 客户端并遇到问题。

我目前有两个我正在测试的虚拟服务;一个是'noauth',它不需要身份验证,只返回一些JSON,另一个是'auth',它需要身份验证并返回更具体的JSON。直接从Web访问两者都没有问题,例如导航到'https://example.org/example/dummy/noauth'会在网页上显示JSON,'https://example.org/example/dummy/auth'会显示一个对话框,要求用户登录。

我的目标是能够从我的主Web应用程序访问这些不同的服务。首先需要用户登录此Web应用程序。然后,他们将能够从该Web应用程序调用不同的服务。我能够使用这个很容易地让noauth工作:

$base_url = 'https://example.org';
$client = new Zend_Rest_Client($base_url);
$endpoint = '/example/dummy/noauth';
$response = $client->restGet($endpoint);

但是我无法让'auth'工作,而不是每次都要求用户的用户名和密码。目前,我正在使用硬编码值,但最终,它将是用户登录时存储在会话中的值。

我发现Zend有一个Zend_Http_Client()方法,似乎它可以用于我需要的东西,但我无法弄清楚如何将它应用于我的REST。

$client = new Zend_Http_Client();
$client->setAuth('username', 'password', Zend_Http_Client::AUTH_BASIC);

是否有人使用Zend_Rest_Client()连接到REST,以及Zend_Http_Client()进行身份验证?

1 个答案:

答案 0 :(得分:2)

经过无数个小时,我终于弄明白了!

您必须在REST对象上调用getHttpClient(),然后在此之后调用Zend_Http_Client()中通常需要的函数。

这是一个简单的例子:

$client = new Zend_Rest_Client($base_url);
$client->getHttpClient()->setAuth($username, $password, Zend_Http_Client::AUTH_BASIC);
...

希望这可以帮助最终遇到同样问题的其他人。