2010-07-16 68 views
7

我有下面的代碼登錄到將本地站點的登錄表單,外部網站應用程序(asp.net應用程序)(用PHP編寫):PHP捲曲 - 發佈asp.net的ViewState值

<?php 
$curl_connection = curl_init('www.external.com/login.aspx'); 

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

// Post data array 
$post_data['LoginControl$UserName'] = 'ExampleUName'; 
$post_data['LoginControl$Password'] = 'ExamplePWord'; 

// Add form fields into an array to get ready to post 
foreach ($post_data as $key => $value) 
    { 
$post_items[] = $key . '=' . $value; 
    } 
$post_string = implode ('&', $post_items); 

// Tell cURL which string to post 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 

// Execute and post 
$result = curl_exec($curl_connection); 
?> 

我指向外部網站的登錄表單,而不是定向到登錄的應用程序。我認爲問題是我需要傳遞viewstate值,但我不知道如何去做這件事?

我無法控制外部應用程序。但我們希望用戶能夠通過我們的網站登錄到應用程序,以保持品牌等

我已經發布了一些其他線程最近關於使用PHP cURL,但我現在在舞臺上我認爲視圖狀態是問題...

謝謝,馬克。

回答

2

變化:

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

要:

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, false); 

您還需要設置一個cookie文件,看看CURLOPT_COOKIEFILE

CURLOPT_COOKIEFILE

的名稱包含cookie數據的文件。 cookie文件可以是Netscape格式,也可以是簡單的HTTP風格的頭文件轉儲到文件中。

CURLOPT_COOKIE

所述的內容 「的Cookie:」 頭在HTTP請求中使用。請注意,多個cookie用分號後面加一個空格分開(例如,「水果=蘋果;的color = red」)

CURLOPT_COOKIEJAR

他名字的文件來保存所有的內部餅乾當連接的關閉。

@see http://www.php.net/manual/en/function.curl-setopt.php

curl_setopt($curl_connection, CURLOPT_COOKIEFILE, 'cookiefile.txt'); 
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, 'cookiefile.txt'); 
+0

感謝 - 增加了那些,但仍然只是被定向到登錄表單上的外部網站.. – 2010-07-16 09:51:25

4

這似乎試圖刮掉asp.net頁面時,是一個真正的問題。

頁面包含一個名爲「__VIEWSTATE」的隱藏字段,其中包含base64編碼的一組頁面,其中包含頁面發送時的部分或全部頁面狀態。它通常也包含viewstate的SHA1。

這意味着您的帖子必須包含_VIEWSTATE中的所有內容,否則將失敗。

我已經能夠張貼只有2場,但不是一個更加複雜的頁面中,筆者選擇把整個頁面的狀態在ViewState簡單的登錄頁面。

正如我卻沒有能夠拿出一個解決方案。

+0

感謝您的答覆埃德。我也得出了這是由於VIEWSTATE值的緣故。 – 2010-10-08 14:25:46