Vb.net Can';t使用httpwebrequest加载页面
我想从以下地址获取航班时刻表: {“BookingPathArguments”:null,“OriginDestinations”:[{“IsOpen”:false,“DataIdOrigin”:6337,“DataIdDestination”:6707,“DateTime”:“2016-04-27T00:00:00.000”;“TravelerTypes”:[{“DataId”:1,“TravelerCount”:1},{“DataId”:2,“TravelerCount”:0},{“DataId”:3,“TravelerCount”:0}],“Currency”:{“Code”:“BDT”;“PromoCode”:null,“DisplayRealAvailability”:false,“可见性”:0,“ExtendedSearchDayCount”:3} 如果您将地址粘贴到浏览器地址栏并使用firebug(或任何fiddler),您将看到此页面发送3个jquery ajax调用以获取日程安排 PostData:SaleConditionAccepted=false&ExtendedSearchDayCount=3&DoNotCheckCache=false&AlreadyLoggedIn=false&TempDataGuid=NVES1YV4XOia40CmotiXof1&CurrencyCode=BDT&FareBasisDayTaid=&Travelers[0][DataId]=1&Travelers[0][Count 1&UserSelectedDate[0][SelectedDate]=2016-04-27T00:00:00&UserSelectedDate[0][DataIdOrigin]=6337&UserSelections[0][DataIdDestination]=6707&UserSelections[0][GenericClassDataId]=&UserSelections[0][SelectedSegments]=&JsonPrepareBookingRequest=&PromCode= 我正在使用httpwebrequest发送请求,但由于未知原因,我错过了会话。我使用CookieContainer保存cookies。我使用以下函数发送httprequest:Vb.net Can';t使用httpwebrequest加载页面,vb.net,httpwebrequest,Vb.net,Httpwebrequest,我想从以下地址获取航班时刻表: {“BookingPathArguments”:null,“OriginDestinations”:[{“IsOpen”:false,“DataIdOrigin”:6337,“DataIdDestination”:6707,“DateTime”:“2016-04-27T00:00:00.000”;“TravelerTypes”:[{“DataId”:1,“TravelerCount”:1},{“DataId”:2,“TravelerCount”:0},{“Data
Public Function GetPostWP(ByVal Url As String, ByVal CkCont As CookieContainer, Optional ByVal PostData As String = "", Optional ByVal refSite As String = "") As String
Dim pStr As String = ""
Try
Dim Http As HttpWebRequest = WebRequest.Create(Url)
If refSite <> "" Then Http.Referer = refSite
Http.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate")
Http.CookieContainer = CkCont 'Initial CkCont is Nothing
Http.KeepAlive = True
Http.AllowAutoRedirect = True
'Http.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6"
Http.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Http.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36"
If PostData <> "" Then
Http.Method = "POST"
Http.ContentLength = PostData.Length
Http.ContentType = "application/x-www-form-urlencoded"
Dim PostStream As StreamWriter = New StreamWriter(Http.GetRequestStream())
PostStream.Write(PostData)
PostStream.Close()
End If
Using WebResponse As HttpWebResponse = Http.GetResponse()
Dim responseStream As Stream = WebResponse.GetResponseStream()
If (WebResponse.ContentEncoding.ToLower().Contains("gzip")) Then
responseStream = New GZipStream(responseStream, CompressionMode.Decompress)
ElseIf (WebResponse.ContentEncoding.ToLower().Contains("deflate")) Then
responseStream = New DeflateStream(responseStream, CompressionMode.Decompress)
End If
Dim reader As StreamReader = New StreamReader(responseStream, Encoding.Default)
pStr = reader.ReadToEnd()
responseStream.Close()
End Using
tmpCky = CkCont 'tmpCky is a Public CookieContainer Variable to hold cookies for future use.
GetPostWP = pStr
Catch ex As Exception
GetPostWP = "Error : " & ex.Message
End Try
End Function
Dim Cky As New CookieContainer
Dim Txt as String = GetPostWP(PostAddress, Cky, PostData, RefAdd)
Cky = tmpCky
公共函数GetPostWP(ByVal Url作为字符串,ByVal CkCont作为CookieContainer,可选ByVal PostData作为字符串=”,可选ByVal refSite作为字符串=”)作为字符串
Dim pStr As String=“”
尝试
Dim Http作为HttpWebRequest=WebRequest.Create(Url)
如果是refSite“”,则Http.Referer=refSite
Add(HttpRequestHeader.AcceptEncoding,“gzip,deflate”)
Http.CookieContainer=CkCont'初始CkCont为空
Http.KeepAlive=True
Http.AllowAutoRedirect=True
'Http.UserAgent=“Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.9.2)Gecko/20100115 Firefox/3.6”
Http.Accept=“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8“
Http.UserAgent=“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/34.0.1847.137 Safari/537.36”
如果PostData为“”,则
Http.Method=“POST”
Http.ContentLength=PostData.Length
Http.ContentType=“应用程序/x-www-form-urlencoded”
Dim PostStream As StreamWriter=新StreamWriter(Http.GetRequestStream())
PostStream.Write(PostData)
PostStream.Close()
如果结束
使用WebResponse作为HttpWebResponse=Http.GetResponse()
Dim responseStream As Stream=WebResponse.GetResponseStream()
如果(WebResponse.ContentEncoding.ToLower().包含(“gzip”)),则
responseStream=New GZipStream(responseStream,CompressionMode.decompresse)
ElseIf(WebResponse.ContentEncoding.ToLower().Contains(“deflate”))然后
responseStream=新的放气流(responseStream,压缩模式。解压缩)
如果结束
Dim reader As StreamReader=新StreamReader(responseStream,Encoding.Default)
pStr=reader.ReadToEnd()
responseStream.Close()
终端使用
tmpCky=CkCont'tmpCky是一个公共CookieContainer变量,用于保存Cookie以备将来使用。
GetPostWP=pStr
特例
GetPostWP=“错误:”&ex.消息
结束尝试
端函数
Dim Cky作为新的CookieContainer
Dim Txt as String=GetPostWP(PostAddress、Cky、PostData、RefAdd)
Cky=tmpCky
有人可以分析该页面吗?您是否尝试过不使用“Http.KeepAlive=True”我尝试过,但没有成功。该页面突然创建了一个RequestVerificationToken Cookie,这是我使用httpwebrequest无法获得的。是否有创建此Cookie的脚本?是否有专家?请回答。