2011-02-02 11 views
6

Sto cercando di inviare i dati per questa pagina utilizzando classe HttpWebRequest:l'invio di dati utilizzando HttpWebRequest con una pagina di login

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

ma ho affrontato un problema con l'autenticazione di accesso. heres il mio codice:

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(); 

E questa è la pagina di Login:

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

Grazie in anticipo.

+0

Nessuno può aiutare? – Rawhi

+0

Che tipo di autenticazione viene utilizzata per accedere? Non sembra che tu stia fornendo credenziali? Inoltre, postData dovrebbe essere un oggetto StringBuilder. concatenare molte stringhe come questa è una cattiva pratica. – TimC

+0

nonché la cattiva pratica, il mio problema è che la pagina di accesso non è in realtà la pagina di accesso reale, ma invece reindirizza a un'altra pagina Web "PostLogin.asp" che a sua volta reindirizza alla pagina principale. Ho provato ad usare la roba dei cookie ma non ha funzionato anche per me. – Rawhi

risposta

1

Prova d'uso:

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

Se questo non funziona si può autenticare l'utente sulla pagina di login e passare CookieContainer lì e quindi riutilizzare CookieContainer quando si richiede la pagina necessaria.

+0

Non potevo credere che fosse così facile. –

0

ci sono un paio di cose diverse che potrebbero essere in corso qui

Prova a impostare alcune credenziali

myRequest.Credentials = CredentialCache.DefaultCredentials; 

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

e assicurarsi che si sta impostando un UserAgent e le impostazioni del accpet pure.

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

Se si aggiungono questi non penso che si avranno problemi.

4

Prima di tutto, sembra che tu non stia effettivamente inviando la richiesta. Per inviare la richiesta POST al server è necessario richiedere la risposta:

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(); 
} 

Inoltre, sembra che la pagina che state postando è alla ricerca di un consolidato e autenticato sessione. Prova prima a pubblicare le credenziali nella pagina di accesso (http://stage1.darotools.com/Quran.v1.admin/Login.asp). Impostare HttpWebRequest.CookieContainer su una nuova istanza di CookieContainer(). Quindi, eseguire un altro post sulla pagina CreateForm.asp, ma assicurarsi di impostare il nuovo oggetto HttpWebRequest.CookieContainer per utilizzare la stessa istanza del CookieContainer che è stato utilizzato quando si è eseguito un POST nella pagina di accesso. Quindi i cookie ricevuti dalla pagina di accesso verranno inviati alla pagina CreateForm.asp e la sessione verrà "mantenuta" dal punto di vista del server. Ad esempio:

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

Ho provato anche questo, ma ogni volta che richiedo la pagina CreatForm mi reindirizza nella pagina di accesso che contiene solo il modulo di login e la pagina di login effettiva viene gestita in PostLogin.asp – Rawhi

Problemi correlati