2009-08-26 18 views
7

मैं प्रोग्रामिक रूप से एक विशिष्ट फॉर्म सबमिट करने का प्रयास कर रहा हूं, लेकिन मुझे हमेशा प्रारंभिक पृष्ठ वापस मिलता है। मुझे कुछ गलत करना होगा या यहां कुछ याद आना चाहिए। मैं सत्र कुकी और कुछ पोस्ट डेटा जैसे व्यूस्टेट (जिसे मैं प्रारंभिक अनुरोध से पार्स करता हूं) भेज रहा हूं, और सत्र आईडी (यह वह मान है जो मैं अन्य वर्षों से फॉर्मू डेटा में बदलता हूं)। लेकिन दूसरा अनुरोध में मैं allways डेटा सत्र 899 के लिए, प्राप्त एक के बजाय मैं अनुरोध करते हैं: 875.फॉर्मेटेटिक रूप से फॉर्म सबमिट करना

यहाँ इस्तेमाल किया कोड है :, किसी भी मदद की बहुत

retrieveEdmIndexForSession (875) apreciated है;

protected string retrieveEdmIndexForSession(int sessionId) { 

    CookieContainer cookies; 
    HttpWebRequest oRequest; 
    HttpWebResponse oResponse; 
    Stream sw; 
    StreamReader sr; 
    string pageData; 
string PathRemote = @"http://edmi.parliament.uk/EDMi/EDMList.aspx"; 


    /* 
    * download the index page so we can get Cookies and ViewState from it. 
    */ 
    oRequest = (HttpWebRequest)WebRequest.Create(PathRemote); 
    oRequest.Method = "GET"; 
    oRequest.AllowAutoRedirect = true; 
    oRequest.CookieContainer = new CookieContainer(); 
    oRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    oRequest.Referer = "http://edmi.parliament.uk/EDMi/EDMList.aspx"; 


    oResponse =(HttpWebResponse) oRequest.GetResponse(); 
    sr = new StreamReader(oResponse.GetResponseStream()); 

    pageData = sr.ReadToEnd(); 

    /* 
    * extract view state from pageData. 
    */ 
    string viewState = this.ExtractViewState(pageData); 


    /* 
    * lets submit the form with the parameters we want 
    */ 
    oRequest = (HttpWebRequest)WebRequest.Create(PathRemote); 
    oRequest.Method = "POST"; 
    oRequest.AllowAutoRedirect = true; 
    oRequest.ContentType = "application/x-www-form-urlencoded"; 
    oRequest.CookieContainer = new CookieContainer(); 
    oRequest.CookieContainer.Add(oResponse.Cookies); 
    oRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
    oRequest.Referer = "http://edmi.parliament.uk/EDMi/EDMList.aspx"; 

    string postdata = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=" + viewState + "&_MenuCtrl%3AddlSession=" + sessionId + "&_MenuCtrl%3A_GoTo.x=57&_MenuCtrl%3A_GoTo.y=14&ddlStatus=1&ddlSortedBy=1"; 
    byte[] buffer = Encoding.UTF8.GetBytes(postdata); 
    oRequest.ContentLength = buffer.Length; 

    /* 
    * Send post data into request stream first 
    */ 
    sw = oRequest.GetRequestStream(); 
    sw.Write(buffer, 0, buffer.Length); 
    sw.Flush(); 
    sw.Close(); 

    /* 
    * Connect, send and get response 
    */ 
    oResponse = (HttpWebResponse)oRequest.GetResponse(); 
    sr = new StreamReader(oResponse.GetResponseStream()); 

    //OnLogUpdated(1, "\r\nStatus Code: " + oResponse.StatusCode); 
    //OnLogUpdated(1, "\r\nServer: " + oResponse.Server); 

    pageData = sr.ReadToEnd(); 
    string result = getSessionId(pageData); 
    //OnLogUpdated(1, "\r\nRestuls: [" + result + "]"); 
    //OnLogUpdated(1, "\r\nPage: [" + pageData + "]"); 


    return pageData; 


} 



private string ExtractViewState(string str) 
{ 
    string viewState = ""; 
    string pattern = "(?<=__VIEWSTATE\" value=\")(?<val>.*?)(?=\")"; 

    Match match = Regex.Match(str, pattern); 

    if (match.Success) 
    { 
     viewState = match.Groups["val"].Value; 
     viewState = HttpUtility.UrlEncodeUnicode(viewState); 

    } 

    return viewState; 
} 

protected string getSessionId(string str) 
{ 
    string sessionId = string.Empty; 

    str = str.Trim(); 

    string pattern = @"&SESSION=([^']+)'"; 

    Match match = Regex.Match(str, pattern, RegexOptions.IgnoreCase); 
    if (match.Success) 
    { 
     sessionId = match.Groups[1].ToString(); ; 

    } 

    return sessionId; 
} 

यह रॉ अनुरोध है .NET स्क्रिप्ट द्वारा भेजा जा रहा है।

पोस्ट /EDMi/EDMList.aspx HTTP/1.1 सामग्री प्रकार: आवेदन/x-www फार्म-urlencoded स्वीकार करें: पाठ/html, आवेदन/xhtml + xml, application/xml; क्ष = 0.9, /; q = 0.8 Referer: http://edmi.parliament.uk/EDMi/EDMList.aspx उपयोगकर्ता-एजेंट: .नेट फ्रेमवर्क ग्राहक मेजबान: edmi.parliament.uk कुकी: ASP.NET_SessionId = k55fqarvx2oszp2wxhtrol45 सामग्री-लंबाई: 2431 की अपेक्षा: 100 -continue

__EVENTTARGET = & __EVENTARGUMENT = & __VIEWSTATE = dDwxMDgyNzIxNDQ2O3Q8O2w8aTwzPjs% 2bO2w8dDw7bDxpPDE% 2bO2k8Mz47aTw1PjtpPDExPjs% 2bO2w8dDw7bDxpPDEzPjtpPDE3Pjs% 2bO2w8dDx0PHA8cDxsPERhdGFWYWx1ZUZpZWxkO0RhdGFUZXh0RmllbGQ7PjtsPFNFU1NJT05JRDtJVEVNX1ZBTFVFOz4% 2bOz47dDxpPDIwPjtAPDA4LTA5OzA3LTA4OzA2LTA3OzA1LTA2OzA0LTA1OzAzLTA0OzAyLTAzOzAxLTAyOzAwLTAxOzk5LTAwOzk4LTk5Ozk3LTk4Ozk2LTk3Ozk1LTk2Ozk0LTk1OzkzLTk0OzkyLTkzOzkxLTkyOzkwLTkxOzg5LTkwOz47QDw4OTk7ODkxOzg4NTs4NzU7ODczOzY4Mjs2ODE7NjgwOzY3OTs3MDM7NzAyOzcwMTs3MDA7Njk5OzY5ODs2OTc7Njk2OzY5NTs2OTQ7NjkzOz4% 2bOz47Oz47dDxwPGw8VGV4dDs% 2bO2w8TGlzdCBPZiBFYXJseSBEYXkgTW90aW9uczs% 2bPjs7Pjs% 2bPjt0PDtsPGk8MT47aTwzPjs% 2bO2w8dDx0PDs7bDxpPDA% 2bOz4% 2bOzs% 2bO3Q8dDw7O2w8aTwwPjs% 2bPjs7Pjs% 2bPjt0PDtsPGk8MT47aTwzPjs% 2bO2w8dDw7bDxpPDE% 2bO2k8Mz47aTw1PjtpPDc% 2bOz47bDx0PHA8cDxsPENvbW1hbmRBcmd1bWVudDtDc3NDbGFzcztFbmFibGVkO18hU0I7PjtsPDA7UGFnZUZpcnN0RGlzYWJsZWQ7b zxmPjtpPDI% 2bOz4% 2bOz47Oz47dDxwPHA8bDxDb21tYW5kQXJndW1lbnQ7Q3NzQ2xhc3M7RW5hYmxlZDtfIVNCOz47bDwtMTtQYWdlUHJldkRpc2FibGVkO288Zj47aTwyPjs% 2bPjs% 2bOzs% 2bO3Q8cDxwPGw8Q29tbWFuZEFyZ3VtZW50O0Nzc0NsYXNzO18hU0I7PjtsPDE7UGFnZU5leHRFbmFibGVkO2k8Mj47Pj47Pjs7Pjt0PHA8cDxsPENvbW1hbmRBcmd1bWVudDtDc3NDbGFzcztfIVNCOz47bDw0MjtQYWdlTGFzdEVuYWJsZWQ7aTwyPjs% 2bPjs% 2bOzs% 2bOz4% 2bO3Q8O2w8aTwxPjtpPDM% 2bO2k8NT47aTw3Pjs% 2bO2w8dDxwPHA8bDxUZXh0Oz47bDwyMTA5Oz4% 2bOz47Oz47dDxwPHA8bDxUZXh0Oz47bDxFRE1zIGFuZCBBbWVuZG1lbnRzOz4% 2bOz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxOz4% 2bOz47Oz47dDxwPHA8bDxUZXh0Oz47bDw1MDs% 2bPjs% 2bOzs% 2bOz4% 2bOz4% 2bO3Q8O2w8aTwxPjtpPDM% 2bOz47bDx0PDtsPGk8MT47aTwzPjtpPDU% 2bO2k8Nz47PjtsPHQ8cDxwPGw8Q29tbWFuZEFyZ3VtZW50O0Nzc0NsYXNzO0VuYWJsZWQ7XyFTQjs% 2bO2w8MDtQYWdlRmlyc3REaXNhYmxlZDtvPGY% 2bO2k8Mj47Pj47Pjs7Pjt0PHA8cDxsPENvbW1hbmRBcmd1bWVudDtDc3NDbGFzcztFbmFibGVkO18hU0I7PjtsPC0xO1BhZ2VQcmV2RGlzYWJsZWQ7bzxmPjtpPDI% 2bOz4% 2bOz47Oz47dDxwPHA8bDxDb21tYW5kQXJndW1lbnQ7Q3NzQ2xhc3M7XyFTQjs% 2bO2w8MTtQYWdlTmV4dEVuYWJsZWQ7aTwyPjs% 2 bPjs% 2bOzs% 2bO3Q8cDxwPGw8Q29tbWFuZEFyZ3VtZW50O0Nzc0NsYXNzO18hU0I7PjtsPDQyO1BhZ2VMYXN0RW5hYmxlZDtpPDI% 2bOz4% 2bOz47Oz47Pj47dDxwPHA8bDxWaXNpYmxlOz47bDxvPGY% 2bOz4% 2bOz47bDxpPDE% 2bO2k8Mz47aTw1PjtpPDc% 2bOz47bDx0PHA8cDxsPFRleHQ7PjtsPDIxMDk7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPEVETXMgYW5kIEFtZW5kbWVudHM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDUwOz4% 2bOz47Oz47Pj47Pj47Pj47Pj47bDxfTWVudUN0cmw6X0dvVG87Pj5NHcFbPBNzNuwxs7sYLdUE2omkjw% 3d% 3d & _MenuCtrl% 3AddlSession = 875 & _MenuCtrl% 3A_GoTo.x = 57 & _MenuCtrl% 3A_GoTo।y = 14 & ddlStatus = 1 & ddlSortedBy = 1

यह आईई द्वारा भेजे गए रॉ अनुरोध है:

पोस्ट /EDMi/EDMList.aspx HTTP/1.1 स्वीकार करें: image/gif, छवि/jpeg, छवि/pjpeg, छवि/pjpeg, आवेदन/x-शॉकवेव-फ़्लैश, आवेदन/XAML + xml, आवेदन/vnd.ms-xpsdocument, आवेदन/x-एमएस-xbap, आवेदन/एक्स -ms-application, एप्लिकेशन/vnd.ms-exc एल, आवेदन/vnd.ms-पावरपॉइंट, अनुप्रयोग/msword, / Referer: http://edmi.parliament.uk/EDMi/EDMList.aspx स्वीकार करें-भाषा: en-gb उपयोगकर्ता-एजेंट: मोज़िला/4.0 (संगत; एमएसआईई 8.0; विंडोज एनटी 5.1; ट्राइडेंट/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.1; .NET CLR 3.0.04506.648; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) सामग्री-प्रकार: एप्लिकेशन/एक्स-www-form-urlencoded स्वीकार्य-एन्कोडिंग: gzip, डिफ्लेट होस्ट: edmi.parliament.uk सामग्री-लंबाई: 2431 कनेक्शन: Keep-Alive Pragma: नो-कैश कुकी: WT_FPC = id = 83.217.99.254-2364242496.30021299: lv = 1249572414567: एसएस = 1249572414567; ASP.NET_SessionId = vwxgo4rlex1j5m55l0bivrqo

__EVENTTARGET = & __EVENTARGUMENT = & __VIEWSTATE = dDwxMDgyNzIxNDQ2O3Q8O2w8aTwzPjs% 2BO2w8dDw7bDxpPDE% 2BO2k8Mz47aTw1PjtpPDExPjs% 2BO2w8dDw7bDxpPDEzPjtpPDE3Pjs% 2BO2w8dDx0PHA8cDxsPERhdGFWYWx1ZUZpZWxkO0RhdGFUZXh0RmllbGQ7PjtsPFNFU1NJT05JRDtJVEVNX1ZBTFVFOz4% 2BOz47dDxpPDIwPjtAPDA4LTA5OzA3LTA4OzA2LTA3OzA1LTA2OzA0LTA1OzAzLTA0OzAyLTAzOzAxLTAyOzAwLTAxOzk5LTAwOzk4LTk5Ozk3LTk4Ozk2LTk3Ozk1LTk2Ozk0LTk1OzkzLTk0OzkyLTkzOzkxLTkyOzkwLTkxOzg5LTkwOz47QDw4OTk7ODkxOzg4NTs4NzU7ODczOzY4Mjs2ODE7NjgwOzY3OTs3MDM7NzAyOzcwMTs3MDA7Njk5OzY5ODs2OTc7Njk2OzY5NTs2OTQ7NjkzOz4% 2BOz47Oz47dDxwPGw8VGV4dDs% 2BO2w8TGlzdCBPZiBFYXJseSBEYXkgTW90aW9uczs% 2BPjs7Pjs% 2BPjt0PDtsPGk8MT47aTwzPjs% 2BO2w8dDx0PDs7bDxpPDA% 2BOz4% 2BOzs% 2BO3Q8dDw7O2w8aTwwPjs% 2BPjs7Pjs% 2BPjt0PDtsPGk8MT47aTwzPjs% 2BO 2w8dDw7bDxpPDE% 2BO2k8Mz47aTw1PjtpPDc% 2BOz47bDx0PHA8cDxsPENvbW1hbmRBcmd1bWVudDtDc3NDbGFzcztFbmFibGVkO18hU0I7PjtsPDA7UGFnZUZpcnN0RGlzYWJsZWQ7bzxmPjtpPDI% 2BOz4% 2BOz47Oz47dDxwPHA8bDxDb21tYW5kQXJndW1lbnQ7Q3NzQ2xhc3M7RW5hYmxlZDtfIVNCOz47bDwtMTtQYWdlUHJldkRpc2FibGVkO288Zj47aTwyPjs% 2BPjs% 2BOzs% 2BO3Q8cDxwPGw8Q29tbWFuZEFyZ3VtZW50O0Nzc0NsYXNzO18hU0I7PjtsPDE7UGFnZU5leHRFbmFibGVkO2k8Mj47Pj47Pjs7Pjt0PHA8cDxsPENvbW1hbmRBcmd1bWVudDtDc3NDbGFzcztfIVNCOz47bDw0MjtQYWdlTGFzdEVuYWJsZWQ7aTwyPjs% 2BPjs% 2BOzs% 2BOz4% 2BO3Q8O2w8aTwxPjtpPDM% 2BO2k8NT47aTw3Pjs% 2BO2w8dDxwPHA8bDxUZXh0Oz47bDwyMTA5Oz4% 2BOz47Oz47dDxwPHA8bDxUZXh0Oz47bDxFRE1zIGFuZCBBbWVuZG1lbnRzOz4% 2BOz47Oz47dDxwPHA8bDxUZXh0Oz47bDwxOz4% 2BOz47Oz47dDxwPHA8bDxUZXh0Oz47bDw1MDs% 2BPjs% 2BOzs% 2BOz4% 2BOz4% 2BO3Q8O2w8aTwxPjtpPDM% 2BOz47bDx0PDtsPGk8MT47aTwzPjtpPDU% 2BO2k8Nz47PjtsPHQ8cDxwPGw8Q29tbWFuZEFyZ3VtZW50O0Nzc0NsYXNzO0VuYWJsZWQ7XyFTQjs% 2BO2w8MDtQYWdlRmlyc3REaXNhYmxlZDtvPGY% 2BO2k8Mj47Pj47Pjs7Pjt0PHA8cDxsPENvbW1hbmRBcmd1bWVudDtDc3NDbGFzcztFbmFibGVkO18hU0I7PjtsPC0xO1B hZ2VQcmV2RGlzYWJsZWQ7bzxmPjtpPDI% 2BOz4% 2BOz47Oz47dDxwPHA8bDxDb21tYW5kQXJndW1lbnQ7Q3NzQ2xhc3M7XyFTQjs% 2BO2w8MTtQYWdlTmV4dEVuYWJsZWQ7aTwyPjs% 2BPjs% 2BOzs% 2BO3Q8cDxwPGw8Q29tbWFuZEFyZ3VtZW50O0Nzc0NsYXNzO18hU0I7PjtsPDQyO1BhZ2VMYXN0RW5hYmxlZDtpPDI% 2BOz4% 2BOz47Oz47Pj47dDxwPHA8bDxWaXNpYmxlOz47bDxvPGY% 2BOz4% 2BOz47bDxpPDE% 2BO2k8Mz47aTw1PjtpPDc% 2BOz47bDx0PHA8cDxsPFRleHQ7PjtsPDIxMDk7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPEVETXMgYW5kIEFtZW5kbWVudHM7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDE7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPDUwOz4% 2BOz47Oz47Pj47Pj47Pj47Pj47bDxfTWVudUN0cmw6X0dvVG87Pj5NHcFbPBNzNuwxs7sYLdUE2omkjw% 3 डी% 3 डी & _MenuCtrl% 3AddlSession = 885 & ddlStatus = 0 & ddlSortedBy = 1 & _MenuCtrl% 3A_GoTo।एक्स = 37 & _MenuCtrl% 3A_GoTo.y = 12

आईई हैडर एक अतिरिक्त कुकी (WT_FPC = id = 83.217.99.254-2364242496.30021299: lv = 1249572414567: ss = 1249572414567;) है लगता है डायन ट्रैक करने के लिए appers WebTrends कुकी प्लग-इन के माध्यम से कुकीज़ का उपयोग कर आगंतुक। दोनों पोस्ट अनुरोध HTTP स्थिति कोड 302 लौटाएं और जीईटी अनुरोध पर रीडायरेक्ट करें जो स्टेटस 200 लौटाता है।

कोई विचार?

+0

क्या आपने फिडलर को हुक अप करने और अपने प्रोग्रामेटिक रूप से तैयार किए गए एक वास्तविक अनुरोध को अलग करने की कोशिश की है? कहीं अंतर होना चाहिए। – Pike65

+0

मैं फिडलर के साथ इसे समझने की कोशिश कर रहा हूं। मैं अनुरोध के रॉ डेटा के साथ पोस्ट अपडेट करूंगा। –

उत्तर

2

मैंने इसे क्रैक कर दिया है। ऐसा लगता है कि .NET सर्वर मुझे एक ही समय में स्थिति और सत्र को बदलना पसंद नहीं करता है। यह काम करता है अगर मैं से "ddlStatus" बदलने के लिए:

स्ट्रिंग POSTDATA = "__EVENTTARGET = & __EVENTARGUMENT = & __VIEWSTATE =" + ViewState + "& _MenuCtrl% 3AddlSession =" + sessionId + "& _MenuCtrl % 3A_GoTo.x = 57 & _MenuCtrl% 3A_GoTo.y = 14 & ddlStatus = 1 & ddlSortedBy = 1 ";

इस के लिए

:

स्ट्रिंग POSTDATA = "__EVENTTARGET = & __EVENTARGUMENT = & __VIEWSTATE =" + ViewState + "& _MenuCtrl% 3AddlSession =" + sessionId + "& _MenuCtrl% 3A_GoTo। x = 57 & _MenuCtrl% 3A_GoTo.y = 14 & ddlStatus = 0 & ddlSortedBy = 1 ";

मुझे दूसरे POST अनुरोध में ddlStatus को बदलना होगा, और इसलिए फॉर्म में प्रत्येक बदलाव के लिए। .NET बहुत अच्छी तरह से शिक्षित प्रतीत होता है, यह एक समय में केवल एक मीठा ले सकता है।

सभी मदद के लिए धन्यवाद :)

1

शायद यह आपकी समस्या से संबंधित नहीं है, लेकिन कभी-कभी जब आप किसी साइट को स्क्रैप करते हैं तो दूरस्थ सर्वर यह पहचानता है कि ब्राउज़ करने वाला व्यक्ति एक स्क्रिप्ट है और कुछ संचालन को अवरुद्ध करता है। मैं आम तौर पर अनुरोध के लिए UserAgent संपत्ति सेट करके इसे काम करता हूं। यह एक खराब सुरक्षा उपाय है, लेकिन अक्सर मेरे अनुभव में उपयोग किया जाता है।

Here you can find some sample user agent strings

+0

मैंने बिना किसी सफलता के विभिन्न उपयोगकर्ता एजेंटों के साथ प्रयास किया है। ऐसा लगता है कि यह मुद्दा नहीं है। –

1

एकमात्र चीज जिसने मुझे उस अनुरोध में अजीब बताया, Expect शीर्षलेख है। Apparently it's caused problems for people in the past। बंद करने के लिए है कि आप निम्न पंक्ति का उपयोग कर सकते हैं:

हैं कि समस्या यह जो कुछ भी करने के लिए वापस शायद यह है कि संपत्ति की स्थापना के लायक है यह पहले था है, क्योंकि यह एक वैश्विक चर है और अच्छी तरह से अपने कोड के अन्य भागों को प्रभावित कर सकता।

+0

पाइक 65: मैं बस इसमें देख रहा था। मैंने oRequest.ServicePoint.Expect100Continue = false सेट किया है; यह हेडर से रेखा को हटा देता है, लेकिन फिर भी मेरी समस्या बनी हुई है :( –

3

आप हर बार एक नया CookieContainer बना रहे हैं। फॉर्म पेज के अनुरोध के लिए इंडेक्स पेज अनुरोध के कुकी कंटनर का उपयोग करने का प्रयास करें, इसमें अतिरिक्त कुकी होनी चाहिए। वैकल्पिक रूप से, फॉर्म के अलावा कुछ और अतिरिक्त कुकी पास कर सकता है। जांचें कि पेज आईईन्सपेक्टर के HttpAnalyzer या फ़ायरफ़ॉक्स के Firebug का उपयोग करके लोड करता है यह सुनिश्चित करने के लिए कि छवियों जैसे अन्य फॉर्म तत्व कुकी पास नहीं कर रहे हैं।

संबंधित मुद्दे