2011-03-17 144 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不支持特定的功能或認證方案。