Προσπαθώ να κατεβάσετε και να αναλύσει τον κώδικα HTML μιας ιστοσελίδας. Πρόσφατα, η ιστοσελίδα πηγή μετακινηθεί από το να έχουν όλες τις πληροφορίες τους σε μία σελίδα για να κρύβει μέρος της πίσω javascript. Υπάρχει μια «Εμφάνιση όλων» πλαίσιο ελέγχου που χρειάζεται ενεργοποιημένη για να δείτε ολόκληρη τη σελίδα.
Εδώ είναι η ιστοσελίδα: Πηγή Ιστοσελίδα
Ουσιαστικά Ψάχνω για την αυτοματοποίηση ανάκτησης αυτών σελίδα μετά το πλαίσιο ελέγχου έχει πατηθεί. Αυτή τη στιγμή, έχουμε ένα πρόγραμμα C που κατεβάζει την ιστοσελίδα και να χειρίζεται την ανάλυση μας. Δεν είμαι σίγουρος αν μπορεί να δεχθεί javascript στο URL αν αυτό μπορεί να χρησιμοποιηθεί για να λύσει αυτό το πρόβλημα (έχω δοκιμάσει χρησιμοποιώντας ένα σελιδοδείκτη για να καλέσετε το javascript από τη διεύθυνση URL, αλλά δεν ήμουν σε θέση να το πάρει για να χειριστεί το πλαίσιο ελέγχου), αλλά μπορεί να χειριστεί τα αρχεία αν είναι πιο εύκολο να γράψει ένα C # πρόγραμμα που μπορεί να χειριστεί αυτό.
Θα προτιμούσα έναν τρόπο για να κωδικοποιήσει αυτό ο ίδιος αντί να χρησιμοποιήσετε ένα πρόγραμμα τρίτων για να μην χρειάζεται να εγκαταστήσετε τίποτα στον server αυτό τρέχει σε. Κάθε βοήθεια είναι ευπρόσδεκτη.
Επεξεργασία: Βασικά, πώς μπορώ να αυτοματοποιήσει την κλήση προς το javascript που συνδέεται με την «Επιλογή όλων» πλαίσιο ελέγχου ώστε να μπορώ να αρπάξει την html σελίδα που περιέχει τα πάντα, είναι ότι εμφανίζεται πατώντας το πλαίσιο ελέγχου.
Επεξεργασία 2: Εδώ είναι η έξοδος από 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
Είμαι σήμερα να πάρει 500 ΛΑΘΗ από το διακομιστή. Χρειάζεται να συμπεριλάβει όλες αυτές τις GenericWebUserControls στην αίτηση θέση, καθώς; Επίσης, χρειάζεται να περιλαμβάνουν την EVENTVALIDATION;
EDIT 3: Εδώ είναι η τελευταία κώδικα. Είμαι ακόμα να πάρει διακομιστής 500 λάθη.
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: Έχω διαπιστώσει ότι είναι η σειρά PostData που προκαλεί το σφάλμα διακομιστή 500. Αν το κάνω μια κενή συμβολοσειρά, που εξάγει το σύνολο της ιστοσελίδας. Ξέρει κανείς αν είμαι σωστός στο να πρέπει να θέσει τα πάντα που ήρθε από Fiddler2 που είχε μια τιμή στο κορδόνι PostData; Επίσης, ότι __VIEWSTATE είναι μια απίστευτα μακρά σειρά. Τα όρια υπάρχουν ή οτιδήποτε δεν είμαι σίγουρος για;
EDIT 5: Έτρεξα όλα τα έγχορδα που χρησιμοποιούνται σε PostData μέσω ενός κωδικοποιητή URL, αλλά είμαι ακόμα να πάρει διακομιστής 500 λάθη. Υπάρχει κάποιος τρόπος για μένα να διορθώσετε γιατί η θέση του σώματος είναι άκυρη εκεί;
ΛΥΣΗ: Εντάξει, δεν θα μπορούσα να πάρει εγχόρδων PostData μου σωστά, αλλά όταν επικολληθεί στην πρώτη σώμα POST λειτουργεί. Αυτό φαίνεται ότι θα είναι αρκετά καλή, αλλά η ανησυχία μου είναι αν αυτό θα συνεχίσει να εργάζεται.













