2011-03-17 146 views
6

我试图从PHP(Zend Framework)代码连接到aspx Web服务。我需要通过发送一些参数发送到页面(电子邮件,密码)。我曾尝试使用一个Zend_Http_Client,并做到这一点:Zend HTTP客户端密码

$client = new Zend_Http_Client('https://thesiteurl.asmx/Login'); 
$client->setMethod(Zend_Http_Client::POST); 
$client->setAuth($username, $password); 
$client->setParameterPost(array('email' => 'email', 'password' => 'password')); 
$response = $client->request(); 
$this->view->response = $response; 

其中$username, $password是用户名和密码,我用它来登录到Web服务(它有问我的用户名和密码的弹出窗口) 。

此代码给我未经授权的页面。所以即时通讯问我在哪里使用网站的用户名和密码错误?我如何使用它们?

编辑: 验证是auth-basic。

EDIT2:

我跟Web服务的老板,他说,一切都是UTF-8,这是一个问题,不是它是默认?如果不是,我该怎么做?

+1

这应该工作..但你可以尝试将凭据添加到URL:$ client-> setUri('https:// user:[email protected]'); – opHASnoNAME 2011-03-17 18:49:24

+0

试图,没有任何工作 – 2011-03-17 19:11:57

+0

该网站是否使用基本授权或摘要? – akond 2011-03-17 19:23:52

回答

4

您可以检查是否需要引用标头,或者可能需要跨站请求伪造编号。当您登录并转储您的脚本生成的请求时,只需转储您的浏览器发出的请求,然后比较这些请求即可生效。

对于浏览器请求转储,您可以使用livehttpheaders插件的Firefox。

0

取决于弹出框的确是。

您可能需要研究HTTP身份验证。目前,Zend_Http_Client只支持基本的HTTP认证。这个特性是通过使用setAuth()方法,或者通过在URI中指定用户名和密码来使用的。 setAuth()方法需要3个参数:用户名,密码和可选的认证类型参数。如前所述,目前只支持基本身份验证(计划提供摘要身份验证支持)。

// Using basic authentication 
$client->setAuth('shahar', 'myPassword!', Zend_Http_Client::AUTH_BASIC); 

// Since basic auth is default, you can just do this: 
$client->setAuth('shahar', 'myPassword!'); 

// You can also specify username and password in the URI 
$client->setUri('http://christer:[email protected]'); 

Source.

如果这不是一个HTTP认证和被别人somothing,尽量使用卷曲,wget的或LINX,看看到底是什么在页面上发生的事情,现在你可以使用一个Zend_Http_Client模拟。 有时你必须发送cookies,执行一些Js或遵循一些重定向。 Zend_Http_client可以完成所有这些事情。

+0

我已经在curl lib中尝试了各种认证方法。并且不需要cookies或Js。 – 2011-03-19 23:40:06

0

你有试过吗?

$config = array(
    'adapter'  => 'Zend_Http_Client_Adapter_Socket', 
    'ssltransport' => 'tls' 
); 

$client = new Zend_Http_Client('https://thesiteurl.asmx/Login', $config); 
$client->setAuth('shahar', 'myPassword!', Zend_Http_Client::AUTH_BASIC); 

我也很困惑,这是一个弹出HTTP基本身份验证,或东西是自己设计的? 因为基本身份验证你通常不会发送任何post数据...

该网站的真正网址将会很大帮助寻找解决方案...

+0

这是验证基本 – 2011-03-23 17:04:35

+0

尝试使用此代码$ client-> setParameterPost(array('a'=>'asd')); 我得到一个例外,没有它仍然去未经授权的页面 – 2011-03-23 17:21:00

0

如果可以使用浏览器访问SERVIS ,使用萤火虫来检查请求和响应。可能还有其他一些参数,例如cookie。

0

解决这些问题的最好方法就是使用数据包嗅探器(tcpdump,ethereal ...)来查看线路上发生了什么。然后比较您在工作场景(例如从浏览器)观察到的请求/响应与不起作用的请求/响应。

这将很快揭示HTTP级别的精确差异。使用这些信息,您可以找出在处理Zend_Http_Client时需要解决的问题,或者找出Zend_Http_Client不支持特定的功能或认证方案。