ASP.NET schermo Raschiare Messaggio Simula

voti
1

Sto cercando di scaricare e analizzare il codice HTML di una pagina web. Recentemente, il sito web di origine spostato di avere tutte le loro informazioni su una pagina a nascondere parte del dietro javascript. C'è una casella di controllo Mostra tutto che ha bisogno di attivare al fine di visualizzare l'intera pagina.

Ecco il sito: Fonte Sito

In sostanza sto cercando di automatizzare il recupero che pagina dopo la casella di controllo è stato fatto clic. Attualmente, abbiamo un programma C che scarica la pagina web e gestisce le nostre analisi. Non sono sicuro se si può accettare javascript nell'URL se che può essere utilizzato per risolvere questo problema (Ho provato con un bookmarklet per chiamare il javascript dall'URL, ma non ero in grado di farlo per gestire la casella di controllo), ma è in grado di gestire i file se è più facile scrivere un programma C # in grado di gestire questo.

Io preferirei un modo per codificare questo me stesso, piuttosto che utilizzare un programma di terze parti per evitare di dover installare nulla sul server viene eseguito su questo. Qualsiasi aiuto è molto apprezzato.


Edit: In sostanza, come posso automatizzare la chiamata al javascript che è legata a quella Seleziona tutto casella di controllo in modo da poter afferrare la pagina html contenente tutto è che viene visualizzato dopo aver fatto clic sulla casella di controllo.


EDIT 2: Ecco l'output di Fiddler2:

__EVENTTARGET ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox
__EVENTARGUMENT
__LASTFOCUS
__VIEWSTATE (REMOVED DUE TO LENGTH)
__EVENTVALIDATION (REMOVED DUE TO LENGTH)
ctl00$ContentPlaceHolder1$GenericWebUserControl$Organization0 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Initial or Amendment1 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Relief Requested2 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Country3 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$Status4 ALL
ctl00$ContentPlaceHolder1$GenericWebUserControl$StartDate5  
ctl00$ContentPlaceHolder1$GenericWebUserControl$EndDate5    
ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox on

Attualmente sto ricevendo 500 ERRORI dal server. Ho bisogno di includere tutti quei GenericWebUserControls nella richiesta POST come bene? Inoltre ho bisogno di includere l'EVENTVALIDATION?


EDIT 3: Ecco il codice più recente. Sto ancora ricevendo server di 500 errori.

private void CreateRequest()
{
    HttpWebRequest httpWebRequest;
    HttpWebResponse httpWebResponse;
    StreamWriter streamWriter;
    Stream webResponseStream;
    StreamReader streamReader;
    string postData;
    string outputHTML;

    postData = String.Format(&__EVENTTARGET={0} + &__VIEWSTATE={1} + &__EVENTVALIDATION=(2)+&ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox=on +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Organization0=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Initial+or+Amendment1=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Relief+Requested2=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Country3=ALL +&ctl00$ContentPlaceHolder1$GenericWebUserControl$Status4=ALL,EVENTTARGET, VIEWSTATE, EVENTVALIDATION);

    httpWebRequest = (HttpWebRequest)WebRequest.Create(http://services.cftc.gov/sirt/sirt.aspx?Topic=ForeignPart30Exemptions);
    httpWebRequest.Method = POST;
    httpWebRequest.ContentType = application/x-www-form-urlencoded;
    httpWebRequest.ContentLength = postData.Length;

    streamWriter = new StreamWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.ASCII);
    streamWriter.Write(postData);
    streamWriter.Close();

    httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    webResponseStream = httpWebResponse.GetResponseStream();
    streamReader = new StreamReader(webResponseStream);
    outputHTML = streamReader.ReadToEnd();

    Console.WriteLine(outputHTML);
}

EDIT 4: Ho determinato che è la stringa postData che sta causando l'errore del server 500. Se faccio una stringa vuota, emette l'intera pagina web. Qualcuno sa se sono corrette nel dover mettere tutto ciò che è venuto da Fiddler2 che aveva un valore nella stringa postData? Inoltre, che __VIEWSTATE è una stringa incredibilmente lungo. Ci sono limiti o qualsiasi cosa io non sono sicuro di?


EDIT 5: Mi sono imbattuto tutte le stringhe utilizzate in postData attraverso un encoder URL, ma sto ancora ricevendo server di 500 errori. C'è un modo per me per eseguire il debug il motivo per cui quel corpo post è valida?


SOLUZIONE: Ok, non ho potuto ottenere la mia stringa postData corretto, ma quando ho incollato nel corpo POST grezzo funziona. Questo sembra che sarà abbastanza buono, ma la mia preoccupazione è che se questo continuerà a lavorare.

È pubblicato 23/07/2009 alle 16:16
fonte dall'utente
In altre lingue...                            


2 risposte

voti
3

Questa è una pagina di asp.net. Facendo clic sulla casella di controllo fa sì che la pagina per essere inviato al server. Quindi, piuttosto che cercare di simulare il javascript che cosa si vuole fare, invece è simulare la richiesta POST.

Questo è notoriamente complicato con le pagine ASP.NET, perché di solito è necessario per popolare l'ingresso __VIEWSTATE nascosto. Mi consiglia di utilizzare un packet sniffer come Fiddler per visualizzare la richiesta attuale è inviato. Si dovrebbe essere in grado di copiare il ViewState da lì.

Risposto il 23/07/2009 a 16:22
fonte dall'utente

voti
1

Sembra il JavaScript avvia una POST alla stessa pagina. Firebug mostra la seguente nei dati POST.

__EVENTTARGET: ctl00$ContentPlaceHolder1$GenericWebUserControl$ShowAllCheckBox

Questo è probabilmente un buon posto per iniziare la ricerca.

Risposto il 23/07/2009 a 16:25
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more