HttpWebRequest e autenticazione moduli in C #

Sono un ragazzo di sistemi e attualmente sto facendo un progetto di sviluppo web part time quindi sono piuttosto nuovo. Sto cercando di scrivere un client http per www.portapower.com.

Sarà per alcuni elementi che vengono pubblicati sul sito Web e se corrispondono a un particolare requisito verrà stampato un messaggio.

Durante il tentativo di accedere a questa pagina:

http://www.portapower.com/getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==

Il sito Web mi reindirizza a una pagina di registro predefinita:

http://www.portapower.com/defaregit.php

Ecco un frammento di ciò che ho codificato:

CookieContainer myContainer = new CookieContainer(); HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.portapower.com/" + urlpart); request.Credentials = new NetworkCredential("****", "******"); request.CookieContainer = myContainer; request.PreAuthenticate = true; request.Method = "POST"; HttpWebResponse response = (HttpWebResponse) request.GetResponse(); Console.WriteLine(response.StatusCode); Stream resStream = response.GetResponseStream(); Console.WriteLine(resStream.ToString()); 

Ho il nome utente e la password e funziona bene se usato da un browser. Per favore dimmi se questo è un modo corretto per accedere a una pagina autenticata.

Dipende da come il sito Web sta autenticando gli utenti. Se utilizzano l’autenticazione di base o l’autenticazione di Windows, è ansible impostare la proprietà Credentials della class HttpWebRequest su username / password / dominio e dovrebbe funzionare.

Tuttavia, sembra che tu debba inserire il nome utente / password sul sito, il che significa che dovrai prima accedere al sito. Guardando la pagina principale, questo è ciò che trovo nell’elemento

che gestisce l’accesso:

 

Ho incluso solo le parti pertinenti.

./defalogin.php questo, devi andare alla pagina ./defalogin.php prima con HttpWebRequest e POST i valori emtext e pstext . Inoltre, assicurarsi di impostare la proprietà CookieContainer su un’istanza di CookieContainer . Quando ritorna la chiamata al POST, è più che probabile che venga popolato con un cookie che dovrai rispedire al sito. Basta mantenere l’impostazione della proprietà CookieContainer su eventuali istanze successive di HttpWebRequest su quel CookieContainer per assicurarsi che i cookie vengano passati in giro.

Quindi andresti alla pagina indicata nel link.

Di preoccupazione è anche la funzione javascript logincheck , ma guardando le fonti di script, non fa nulla di nota.

Le credenziali che stai passando è per l’autenticazione di Windows. È necessario inviare dati post con dati che simulano l’invio di un modulo quindi captrue il cookie di sessione impostato nella risposta e utilizzare quel cookie per richieste future

Dai un’occhiata a questa risposta che ha il codice per fare questo:

Accedi alla pagina con HttpWebRequest

Non puoi farlo in questo modo; le credenziali che stai passando possono essere utilizzate con uno schema di autenticazione di base (ovvero, nel browser, viene visualizzata una finestra di dialogo nome utente / password). Dovrai simulare l’immissione dei dati in tale modulo e catturare il cookie di accesso e usarlo.

La class NetworkCredential serve per controllare le normali credenziali di Windows (NTLM, Kerberos, ecc.).

Quel sito è un sito PHP in esecuzione su Apache, quindi non penso che stiano usando NTLM o Kerberos.

Quello che vuoi fare è postare alcuni campi FORM al sito, quindi mantenere il cookie che torni. Assicurati che nelle richieste successive tu rimandi il cookie al sito in modo che sappia che hai già effettuato l’accesso.