2010-07-16 73 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