È possibile continuare a utilizzare WebClient su POST (anziché GET, che è lo HTTP verb attualmente utilizzato con DownloadString), ma penso che sarà più facile lavorare con le classi (leggermente) di livello inferiore WebRequest e WebResponse.
Ci sono due parti per questo: il primo è di inviare il modulo di accesso, il secondo è il ripristino dell'intestazione "Set-cookie" e l'invio al server come "Cookie" insieme alla richiesta GET. Il server utilizzerà questo cookie per identificarti da ora in poi (presumendo che stia utilizzando un'autenticazione basata su cookie che sono abbastanza fiducioso in quanto tale pagina restituisce un'intestazione Set-cookie che include "PHPSESSID").
postando il form di login
messaggi Form sono facili da simulare, è solo un caso di formattazione dei dati post come segue:
field1=value1&field2=value2
Utilizzando WebRequest e il codice ho adattato da Scott Hanselman, ecco come inserire POST i dati nel modulo di accesso:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin"; // NOTE: This is the URL the form POSTs to, not the URL of the form (you can find this in the "action" attribute of the HTML's form tag
string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
Ecco un esempio di ciò che si dovrebbe vedere nell'intestazione Set-cookie per il modulo di login:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
Ottenere la pagina dietro il form di login
Ora è possibile eseguire la GET richiesta per una pagina per cui è necessario accedere.
string pageSource;
string getUrl = "the url of the page behind the login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
EDIT:
Se è necessario visualizzare i risultati del primo post, è possibile recuperare il codice HTML è tornato con:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Luogo questo direttamente sotto cookieHeader = resp.Headers["Set-cookie"];
e poi ispezionare la stringa contenuta in pageSource.
Quindi, mi viene in mente un sacco di modi per fare questo ... fa il Il programma C# richiede il 'codice' direttamente dal server via HTTP o ti fa tornare indietro sull'applicazione del browser o cosa? Sono necessarie ulteriori informazioni. –
Il programma utilizza WebClient.DownloadString ("URL") –