पर प्रभाव नहीं डालता है, मैं ऐसी वेबसाइट पर आया जो इतना आसान लगता है कि मुझे पूरा भरोसा था कि मैं HttpWebRequest का उपयोग करके अपना डेटा पढ़ सकूंगा और जीईटी और POST अनुरोध करने में सक्षम होगा। जीईटी अनुरोध ठीक काम कर रहे हैं। POST अनुरोध भी कोई त्रुटि उत्पन्न नहीं करता है लेकिन फिर भी पोस्ट फॉर्म डेटा का परिणाम लौटाए गए परिणामों पर कोई प्रभाव नहीं पड़ता है। पोस्ट किए गए फॉर्म डेटा में डेटा को तारीखों के अनुसार डेटा फ़िल्टर करने के लिए फ़ील्ड होते हैं, लेकिन इस तथ्य के बावजूद कि प्रत्येक आवश्यक डेटा पोस्ट किया गया डेटा वापस फ़िल्टर नहीं किया जाता है। मैंने प्रत्येक हेडर, फॉर्म डेटा जोड़ा है और अनुरोध के साथ कुकीज़ भी जोड़े हैं।HtppWebRequest का उपयोग करके पोस्ट किया गया फॉर्म डेटा
वेबपेज के लिए यूआरएल http://www.bseindia.com/corporates/Insider_Trading_new.aspx?expandable=0
यह एक बहुत ही साधारण वेबसाइट की तरह लगता है है, लेकिन के रूप में यह एक aspx पृष्ठ है और ViewState शामिल है और घटना मान्यता इसलिए यह उम्मीद थी बहुत आसान नहीं।
मेरा पहला कदम फिडलर का उपयोग करके साइट के जीईटी और पोस्ट का विश्लेषण करना था और यह मुझे आश्चर्यचकित करता है क्योंकि फिडलर इस यूआरएल के लिए किसी भी ट्रैफिक को कैप्चर नहीं कर रहा है। मैंने चार्ल्स की कोशिश की है लेकिन वह खुद ही इस यूआरएल को कैप्चर नहीं कर रहा है। अन्य तो यह यूआरएल फिडलर और चार्ल्स दोनों अन्य सभी को पकड़ रहे हैं। मैं यह भी उल्लेख करना चाहता हूं कि जब मैंने एचटीपीवेबआरक्वेट का उपयोग करके कंसोल एप्लिकेशन से यूआरएल को बुलाया तो फिडलर और चार्ल्स दोनों ने इसे कब्जा कर लिया लेकिन वे इसे क्रोम, फ़ायरफ़ॉक्स और इंटरनेट एक्सप्लोरर 11 से कैप्चर नहीं कर रहे हैं।
तो मैंने नेटवर्क गतिविधि का उपयोग करके विश्लेषण किया फ़ायरफ़ॉक्स में डेवलपर टूल और सब कुछ दिखाई दे रहा था जिसमें हेडर, पैरामीटर और कुकीज़ शामिल हैं। क्रोम में कोई कुकीज़ मौजूद नहीं थी। जब मैं HttpWebRequest बनाकर कुकीज़ का निरीक्षण करता हूं और प्रतिक्रिया प्राप्त करता हूं वहां कोई कुकी मौजूद नहीं होती है। तो इस वेबसाइट के साथ कुछ वास्तव में अजीब जा रहा है।
मैंने किसी भी तरह से अनुरोध बनाने और प्रतिक्रिया प्राप्त करने के लिए एक सरल कार्य करने में कामयाब रहा है। मैं जो कर रहा हूं वह यह है कि मैं पहले एक जीईटी अनुरोध बना रहा हूं और वेबसाइट स्ट्रिंग प्राप्त कर रहा हूं और इसे व्यूस्टेट, इवेंट वैलिडेशन इत्यादि निकालता हूं। मैं इस जानकारी का उपयोग दूसरे HttpWebRequest में उपयोग करने के लिए करता हूं जो एक पोस्ट है। अब सब कुछ ठीक काम करता है और मुझे प्रतिक्रिया मिलती है लेकिन उम्मीद के अनुसार नहीं। मैं चाहता हूं कि दो के बीच के रिकॉर्ड दिनांक दें और मैंने इन तिथियों को फॉर्म डेटा में निर्दिष्ट किया है लेकिन अभी भी POST अनुरोध फ़िल्टर किए गए डेटा को वापस नहीं करता है। मैंने उस फ़ंक्शन का उल्लेख किया है जिसे मैंने नीचे बनाया है और मैं वास्तव में किसी भी सुझाव की सराहना करता हूं कि यह क्यों हो रहा है और इसे कैसे संभाला जाए। यह समझने के लिए कि यह मेरे लिए एक चुनौती बन गई है क्योंकि मुझे समझ में नहीं आ रहा है कि यह सरल वेबसाइट फिडलर में क्यों दिखाई नहीं दे रही है। (यह जावास्क्रिप्ट पोस्टबैक का उपयोग करता है)
कोड लंबा और डरावना लग सकता है लेकिन यह बहुत आसान और सीधे आगे है।
Try
' First GET Request to obtain Viewstate, Eventvalidation etc
Dim objRequest2 As Net.HttpWebRequest = DirectCast(HttpWebRequest.Create("http://www.bseindia.com/corporates/Insider_Trading_new.aspx?expandable=0"), HttpWebRequest)
objRequest2.Method = "GET"
objRequest2.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
objRequest2.Headers.Add("Accept-Encoding", "gzip, deflate")
objRequest2.Headers.Add("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6,ur;q=0.4")
objRequest2.KeepAlive = True
objRequest2.ContentType = "application/x-www-form-urlencoded"
objRequest2.Host = "www.bseindia.com"
objRequest2.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
objRequest2.AutomaticDecompression = DecompressionMethods.Deflate Or DecompressionMethods.GZip
Dim LoginRes2 As Net.HttpWebResponse
Dim sr2 As IO.StreamReader
LoginRes2 = objRequest2.GetResponse()
sr2 = New IO.StreamReader(LoginRes2.GetResponseStream)
Dim getString As String = sr2.ReadToEnd()
Dim getCookieCollection = objRequest2.CookieContainer
' get the page ViewState
Dim viewStateFlag As String = "id=""__VIEWSTATE"" value="""
Dim i As Integer = getString.IndexOf(viewStateFlag) + viewStateFlag.Length
Dim j As Integer = getString.IndexOf("""", i)
Dim viewState As String = getString.Substring(i, j - i)
' get page EventValidation
Dim eventValidationFlag As String = "id=""__EVENTVALIDATION"" value="""
i = getString.IndexOf(eventValidationFlag) + eventValidationFlag.Length
j = getString.IndexOf("""", i)
Dim eventValidation As String = getString.Substring(i, j - i)
' get page EventValidation
Dim viewstateGeneratorFlag As String = "id=""__VIEWSTATEGENERATOR"" value="""
i = getString.IndexOf(viewstateGeneratorFlag) + viewstateGeneratorFlag.Length
j = getString.IndexOf("""", i)
Dim viewStateGenerator As String = getString.Substring(i, j - i)
viewState = System.Web.HttpUtility.UrlEncode(viewState)
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation)
Dim LoginRes As Net.HttpWebResponse
Dim sr As IO.StreamReader
Dim objRequest As Net.HttpWebRequest
' Second POST request to post the form data along with cookies
objRequest = DirectCast(HttpWebRequest.Create("http://www.bseindia.com/corporates/Insider_Trading_new.aspx?expandable=0"), HttpWebRequest)
Dim formDataCollection As New NameValueCollection
formDataCollection.Add("__EVENTTARGET", "")
formDataCollection.Add("__EVENTARGUMENT", "")
formDataCollection.Add("__VIEWSTATE", viewState)
formDataCollection.Add("__VIEWSTATEGENERATOR", viewStateGenerator)
formDataCollection.Add("__EVENTVALIDATION", eventValidation)
formDataCollection.Add("fmdate", "20160104")
formDataCollection.Add("eddate", "20160204")
formDataCollection.Add("hidCurrentDate", "2016/02/04")
formDataCollection.Add("ctl00_ContentPlaceHolder1_hdnCode", "")
formDataCollection.Add("txtDate", "04/01/2016")
formDataCollection.Add("ddlCalMonthDiv3", "1")
formDataCollection.Add("ddlCalYearDiv3", "2016")
formDataCollection.Add("txtTodate", "04/02/2016")
formDataCollection.Add("ddlCalMonthDiv4", "2")
formDataCollection.Add("ddlCalYearDiv4", "2016")
formDataCollection.Add("Hidden1", "")
formDataCollection.Add("ctl00_ContentPlaceHolder1_GetQuote1_smartSearch", "Enter Security Name/Code/ID")
formDataCollection.Add("btnSubmit.x", "44")
formDataCollection.Add("btnSubmit.y", "2")
Dim strFormdata As String = formDataCollection.ToString()
Dim encoding As New ASCIIEncoding
Dim postBytes As Byte() = encoding.GetBytes(strFormdata)
objRequest.Method = "POST"
objRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
objRequest.Headers.Add("Accept-Encoding", "gzip, deflate")
objRequest.Headers.Add("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6,ur;q=0.4")
objRequest.Headers.Add("Cache-Control", "private, max-age=60")
objRequest.KeepAlive = True
objRequest.ContentType = "application/x-www-form-urlencoded"
objRequest.Host = "www.bseindia.com"
objRequest.Headers.Add("Origin", "http://www.bseindia.com")
objRequest.Referer = "http://www.bseindia.com/corporates/Insider_Trading_new.aspx?expandable=0"
objRequest.Headers.Add("Upgrade-Insecure-Requests", "1")
objRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
objRequest.ContentType = "text/html; charset=utf-8"
objRequest.Date = "Thu, 04 Feb 2016 13:42:04 GMT"
objRequest.Headers.Add("Server", "Microsoft-IIS/8.0")
objRequest.Headers.Add("Vary", "Accept-Encoding")
objRequest.Headers.Add("X-AspNet-Version", "2.0.50727")
objRequest.Headers.Add("ASP.NET", "ASP.NET")
objRequest.AutomaticDecompression = DecompressionMethods.Deflate Or DecompressionMethods.GZip
Dim gaCookies As New CookieContainer()
Dim cookie1 As New Cookie("__asc", "f673f0d5152a823bc335f575d34")
cookie1.Domain = ".bseindia.com"
cookie1.Path = "/"
gaCookies.Add(cookie1)
Dim cookie2 As New Cookie("__auc", "f673f0d5152a823bc335f575d34")
cookie2.Domain = ".bseindia.com"
cookie2.Path = "/"
gaCookies.Add(cookie2)
Dim cookie3 As New Cookie("__utma", "253454874.280640365.1454519857.1454519865.1454519865.1")
cookie3.Domain = ".bseindia.com"
cookie3.Path = "/"
gaCookies.Add(cookie3)
Dim cookie4 As New Cookie("__utmb", "253454874.1.10.1454519865")
cookie4.Domain = ".bseindia.com"
cookie4.Path = "/"
gaCookies.Add(cookie4)
Dim cookie5 As New Cookie("__utmc", "253454874")
cookie5.Domain = ".bseindia.com"
cookie5.Path = "/"
gaCookies.Add(cookie5)
Dim cookie6 As New Cookie("__utmt", "1")
cookie6.Domain = ".bseindia.com"
cookie6.Path = "/"
gaCookies.Add(cookie6)
Dim cookie7 As New Cookie("__utmz", "253454874.1454519865.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)")
cookie7.Domain = ".bseindia.com"
cookie7.Path = "/"
gaCookies.Add(cookie7)
Dim cookie8 As New Cookie("_ga", "GA1.2.280640365.1454519857")
cookie8.Domain = ".bseindia.com"
cookie8.Path = "/"
gaCookies.Add(cookie8)
Dim cookie9 As New Cookie("_gat", "1")
cookie9.Domain = ".bseindia.com"
cookie9.Path = "/"
gaCookies.Add(cookie9)
Dim postStream As Stream = objRequest.GetRequestStream()
postStream.Write(postBytes, 0, postBytes.Length)
postStream.Flush()
postStream.Close()
LoginRes = objRequest.GetResponse()
sr = New IO.StreamReader(LoginRes.GetResponseStream)
ReadWebsite = sr.ReadToEnd()
sr.Close()
sr = Nothing
LoginRes.Close()
LoginRes = Nothing
objRequest = Nothing
Exit Function
Catch ex As Exception
ReadWebsite = Nothing
End Try
नोट: (viewstate और eventvalidation बिना दिनांकों कच्चे प्रपत्र डेटा)
fmdate: 20,160,130 eddate: 20,160,205 hidCurrentDate: 2016/02/05 ctl00_ContentPlaceHolder1_hdnCode: txtDate: 2016/04/01 ddlCalMonthDiv3: 1 ddlCalYearDiv3: 2016 txtTodate: 2016/04/02 ddlCalMonthDiv4: 2 ddlCalYearDiv4: 2016 Hidden1: ctl00_ContentPlaceHolder1_Ge tQuote1_smartSearch: दर्ज करें सुरक्षा नाम/कोड/आईडी btnSubmit.x: 55 btnSubmit.y: 13
यह वास्तव में सहायक होगा कि एक टिप्पणी प्रदान की जाती है कि सवाल क्यों कम हो गया है और करीब के लिए वोट दिया गया है। मुझे पता है कि इस विशिष्ट विषय पर अलग-अलग प्रश्न हैं लेकिन यह स्थिति और परिदृश्य अलग है। मेरे लिए इस मंच का उद्देश्य उस चीज़ के उत्तर प्राप्त करना है जिसे आप और आपके आस-पास के लोगों द्वारा नहीं समझते हैं। मैंने स्पष्ट रूप से सभी प्रयासों और कोड का उल्लेख किया है जो मैंने लिखा है, इसलिए यह भी ऐसा नहीं है कि मैं उचित शोध के बिना कुछ भी पूछ रहा हूं। –
मैं जांचता हूं: 'formDataCollection.Add ("fmdate", "20160104")' और इसके नीचे की रेखा। आपके द्वारा उपयोग की जाने वाली सभी अन्य तिथियां एक अलग प्रारूप में प्रतीत होती हैं। – Jeroen
@Jeroen आपकी टिप्पणियों के लिए धन्यवाद। मैं उसी प्रारूप का उपयोग कर रहा हूं जिसे मैंने इंस्पेक्टर में पाया था। कृपया मेरी अद्यतन टिप्पणियों की जांच करें। मैंने क्रोम से कॉपी किए गए कच्चे फॉर्म डेटा को जोड़ा है। –