2010-07-16 15 views
7

Tôi có đoạn code sau để đăng nhập vào một ứng dụng bên ngoài trang web (ứng dụng asp.net) từ một hình thức trang web đăng nhập cục bộ (viết bằng php):php curl - giá trị niêm yết 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); 
?> 

tôi được chuyển đến biểu mẫu đăng nhập của trang bên ngoài thay vì được chuyển hướng đến ứng dụng được đăng nhập. Tôi nghĩ rằng vấn đề là tôi cần phải chuyển các giá trị của ViewState qua, nhưng tôi không biết phải làm thế nào?

Tôi không có quyền kiểm soát đối với ứng dụng bên ngoài. Nhưng chúng tôi muốn người dùng có thể đăng nhập vào ứng dụng thông qua trang web của chúng tôi, để duy trì thương hiệu, v.v.

Tôi đã đăng một vài chủ đề khác gần đây về việc sử dụng php cURL, nhưng tôi hiện đang ở giai đoạn nơi tôi nghĩ rằng ViewState là vấn đề ...

Xin cảm ơn, Mark.

Trả lời

2

Thay đổi:

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

Để:

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, false); 

Bạn cũng cần phải thiết lập một tập tin cookie, hãy xem CURLOPT_COOKIEFILE

CURLOPT_COOKIEFILE:

Tên của tệp chứa dữ liệu cookie. Tệp cookie có thể ở định dạng Netscape hoặc chỉ các tiêu đề kiểu HTTP đơn giản được đổ vào một tệp.

CURLOPT_COOKIE:

Nội dung của "Cookie:" tiêu đề được sử dụng trong yêu cầu HTTP. Lưu ý rằng nhiều cookie được tách bằng dấu chấm phẩy theo sau là một không gian (ví dụ, "quả = táo; color = red")

CURLOPT_COOKIEJAR:

ông tên của một tập tin để lưu tất cả các tập tin cookie bên trong để khi kết nối đóng cửa.

@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

Cảm ơn - Thêm những người ở nhưng vẫn chỉ được chuyển trực tiếp tới hình thức đăng nhập vào các trang web bên ngoài .. –

4

Điều này dường như là một vấn đề thực sự khi cố gắng để cạo các trang asp.net.

Các trang có chứa trường ẩn có tên "__VIEWSTATE" chứa tập hợp mã hóa base64 và ues chứa một số hoặc tất cả trạng thái trang khi trang được gửi. Nó cũng thường chứa SHA1 của viewstate.

Điều này có nghĩa là bài đăng của bạn phải chứa mọi thứ trong _VIEWSTATE hoặc nó sẽ thất bại.

Tôi đã có thể đăng một trang đăng nhập đơn giản chỉ có 2 trường nhưng không phải là trang phức tạp hơn mà tác giả đã chọn đặt toàn bộ trạng thái trang trong chế độ xem.

Tôi chưa thể đưa ra giải pháp.

+0

Cảm ơn bạn đã trả lời Ed. Tôi cũng đã đi đến kết luận rằng đó là do giá trị VIEWSTATE. –