2011-02-02 17 views
6

Tôi đang cố gắng để gửi dữ liệu cho trang này bằng cách sử dụng HttpWebRequest lớp:gửi dữ liệu sử dụng HttpWebRequest với một trang đăng nhập

www.stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp 

nhưng tôi phải đối mặt với một vấn đề với chứng thực đăng nhập. heres mã của tôi:

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
    string postData = "ctlMessageID=" + 348; 
    postData += ("&ctlUserID=" + 7); 
    postData += ("&ctlTitle=" + 7); 
    postData += ("&ctlEmail=" + "[email protected]"); 
    postData += ("&ctlIsSystem=" + 0); 
    postData += ("&ctlFormBody="); 
    postData += ("&ctlEnableCaptcha="); 
    postData += ("&ctlEmailAttachedFiles="); 
    postData += ("&ctlMailingList="); 
    postData += ("&ctlCommentaryTitle=" + 1); 
    postData += ("&ctlIsActive=" + 2); 
    postData += ("&ctlCommentaryPersonID=" + 6); 
    postData += ("&ctlOrderKey="); 
    postData += ("&Commentary_TextControl_html=" + "aaaaaaaaaaaa"); 
    postData += ("&controlValue4=" + 666666); 
    postData += ("&ctlLanguageID=" + 1); 
    postData += ("&ctlAya=" + 349); 
    postData += ("&PathInfo=" + "dbsFramed, dbsFramed"); 
    postData += ("&Caller=" + "rawhi"); 
    byte[] data = encoding.GetBytes(postData); 

    // Prepare web request... 
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp"); 
    myRequest.Method = "POST"; 
    myRequest.ContentType = "application/x-www-form-urlencoded"; 
    myRequest.ContentLength = data.Length; 
    Stream newStream = myRequest.GetRequestStream(); 
    // Send the data. 
    newStream.Write(data, 0, data.Length); 
    newStream.Close(); 

Và đây là trang Login:

www.stage1.darotools.com/Quran.v1.admin/Login.asp 

Cảm ơn trước.

+0

Không ai có thể giúp bạn? – Rawhi

+0

Loại xác thực nào đang được sử dụng để đăng nhập bạn? Nó không giống như bạn đang cung cấp bất kỳ thông tin đăng nhập? Ngoài ra, postData phải là một StringBuilder. nối nhiều chuỗi như vậy là thực hành không tốt. – TimC

+0

cho phép thực hành không tốt, vấn đề của tôi là trang Đăng nhập thực sự không phải là trang đăng nhập thực mà thay vào đó nó chuyển hướng đến một trang web khác 'PostLogin.asp', trong đó chuyển hướng đến trang chính. Tôi đã cố gắng sử dụng các công cụ cookie nhưng điều đó không làm việc cho tôi. – Rawhi

Trả lời

1

Cố gắng sử dụng:

myRequest.Credentials = new NetworkCredential("username", "password", "domain"); // domain is not needed in case of forms authentication 

Nếu điều này không làm việc, bạn có thể xác thực người dùng trên trang đăng nhập và chuyển CookieContainer ở đó và sau đó sử dụng lại CookieContainer đó khi yêu cầu trang cần thiết.

+0

Tôi không thể tin rằng điều này là dễ dàng. –

0

Có một vài điều khác nhau mà có thể được xảy ra ở đây

Hãy thử thiết lập một số thông tin

myRequest.Credentials = CredentialCache.DefaultCredentials; 

// if we have a proxy set its creds as well 
if(myRequest.Proxy != null) 
{ 
    myRequest.Proxy.Credentials = CredentialCache.DefaultCredentials; 
} 

Và chắc chắn rằng bạn đang đặt một UserAgent và các thiết lập accpet là tốt.

myRequest.UserAgent = "Foo"; 
myRequest.Accept = "*/*"; 

Nếu bạn thêm chúng, tôi không nghĩ bạn sẽ gặp bất kỳ sự cố nào.

4

Trước hết, có vẻ như bạn chưa thực sự gửi yêu cầu. Để gửi yêu cầu POST tới máy chủ, bạn cần phải yêu cầu phản hồi:

HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse(); 
string responseContent = null; 
using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    //get the text content of the response, if needed 
    responseContent = reader.ReadToEnd(); 
} 

Ngoài ra, có vẻ như trang bạn đang đăng đang tìm kiếm Phiên được thiết lập và xác thực. Trước hết, hãy thử đăng thông tin đăng nhập lên trang đăng nhập (http://stage1.darotools.com/Quran.v1.admin/Login.asp). Đặt HttpWebRequest.CookieContainer thành một phiên bản CookieContainer() mới. Sau đó, thực hiện một bài đăng khác lên trang CreateForm.asp nhưng hãy chắc chắn đặt đối tượng HttpWebRequest.CookieContainer mới để sử dụng cùng một cá thể của CookieContainer mà bạn đã sử dụng khi bạn thực hiện một POST cho trang đăng nhập. Sau đó, các cookie nhận được từ trang đăng nhập sẽ được gửi đến trang CreateForm.asp và phiên sẽ được "duy trì" từ quan điểm của máy chủ. Ví dụ:

CookieContainer m_cookies = new CookieContainer(); 
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/Login.asp"); 
... 

HttpWebResponse response = (HttpWebResponse)myRequest.GetResponse(); 
HttpWebRequest formRequest = (HttpWebRequest)WebRequest.Create("http://stage1.darotools.com/Quran.v1.admin/_FormsWizard/CreateForm.asp"); 
formRequest.CookieContainer = myRequest.CookieContainer; 
using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
{ 
    //get the text content of the response, if needed 
    responseContent = reader.ReadToEnd(); 
} 
+0

Tôi cũng đã thử điều này nhưng mỗi khi tôi yêu cầu trang CreatForm, nó chuyển hướng tôi vào trang đăng nhập chỉ chứa biểu mẫu đăng nhập và trang đăng nhập thực sự được xử lý trong PostLogin.asp – Rawhi

Các vấn đề liên quan