मैं डाउनलोड करने और एक वेब पेज के HTML पार्स करने के लिए कोशिश कर रहा हूँ। हाल ही में, स्रोत वेबसाइट जावास्क्रिप्ट इसके पीछे के हिस्से को छुपा के लिए एक पृष्ठ पर उनकी जानकारी के सभी होने से ले जाया गया। वहाँ एक सभी दिखाएँ चेक बॉक्स है कि पूरे पेज को देखने के लिये सक्रिय की जरूरत है।
यहाँ वेबसाइट है: स्रोत वेबसाइट
अनिवार्य रूप से मुझे लगता है कि पेज को पुन: प्राप्त स्वचालित करने के बाद चेक बॉक्स क्लिक किया गया है देख रहा हूँ। वर्तमान में, हम एक सी प्रोग्राम है जो वेब पेज डाउनलोड करता है और हमारे पार्स संभालती है। मुझे यकीन है कि यह URL में जावास्क्रिप्ट स्वीकार कर सकते हैं कि इस समस्या को हल करने के लिए इस्तेमाल किया जा सकता है, तो नहीं कर रहा हूँ (मैं एक बुकमार्कलेट का उपयोग URL से जावास्क्रिप्ट कॉल करने के लिए कोशिश की है, लेकिन मैं इसे संभाल करने के लिए प्राप्त करने में सक्षम नहीं था चेक बॉक्स), लेकिन यह अगर यह आसान है एक सी # प्रोग्राम है जो इस संभाल कर सकते हैं लिखने के लिए फ़ाइलों को संभाल कर सकते हैं।
मैं बजाय यह अपने आप कोड एक तीसरी पार्टी के कार्यक्रम का उपयोग सर्वर इस पर चलता है पर कुछ भी स्थापित करने से बचने के लिए के लिए एक रास्ता पसंद करेंगे। कोई भी मदद बहुत ही सराहनीय होगी।
संपादित करें: असल में, मैं कैसे जावास्क्रिप्ट कि कि से जुड़ा हुआ है के लिए कॉल को स्वचालित कर सकते तो मैं 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 शामिल करने के लिए की जरूरत है?
संपादित करें 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);
}
संपादित करें 4: मैं निर्धारित किया है कि यह POSTDATA स्ट्रिंग है कि सर्वर 500 त्रुटि उत्पन्न कर रहा है। अगर मैं इसे रिक्त स्ट्रिंग बनाने के लिए, यह पूरे वेबपेज आउटपुट। किसी को पता है कि अगर मैं सब कुछ है कि Fiddler2 कि POSTDATA स्ट्रिंग में एक मूल्य था से आया है डाल करने के लिए का सही कर रहा हूँ? इसके अलावा, कि __VIEWSTATE एक अविश्वसनीय रूप से लंबी स्ट्रिंग है। वहाँ कुछ सीमाएं होती हैं या कुछ भी मैं के बारे में यकीन नहीं है?
संपादित करें 5: मैं एक यूआरएल एनकोडर के माध्यम से POSTDATA में इस्तेमाल तार के सभी भाग गया, लेकिन मैं अभी भी सर्वर 500 त्रुटियों हो रही है। वहाँ मेरे लिए किसी भी तरह से डिबग करने के लिए क्यों कि पोस्ट शरीर अमान्य है है?
समाधान: ठीक है, मैं अपने POSTDATA स्ट्रिंग सही नहीं मिल सका, लेकिन जब मैं कच्चे पोस्ट शरीर में चिपकाया यह काम करता है। यह लगता है कि यह काफी अच्छा होगा, लेकिन मेरी चिंता का विषय है कि अगर यह कार्य करते रहेंगे।













