Проблема в том, что tempCookie.GetCookies()
не делает то, что вы думаете, делает.Что он на самом деле делает, так это фильтрует существующий CookieCollection
, чтобы включить файлы cookie только для предоставленного URL.Вместо этого вам нужно сначала создать запрос к странице, которая выдаст вам этот токен сеанса, а затем выполнить фактический запрос ваших данных.Поэтому сначала запросите страницу на P_Search
, затем повторно используйте этот запрос с привязанным к ней CookieContainer
и отправьте сообщение на P_Results
.
Вместо объекта HttpWebRequest
, однако позвольте мне указатьВы к WebClient
классу и моему посту о расширении поддержки файлов cookie .Вы обнаружите, что можете значительно упростить свой код.Ниже представлено полнофункциональное приложение WinForms для VB2010, которое показывает это.Если вы все еще хотите использовать объект HttpWebRequest
, это должно как минимум дать вам представление о том, что необходимо сделать:
Option Strict On
Option Explicit On
Imports System.Net
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
''//Create our webclient
Using WC As New CookieAwareWebClient()
''//Set SSLv3
System.Net.ServicePointManager.SecurityProtocol = Net.SecurityProtocolType.Ssl3
''//Create a session, ignore what is returned
WC.DownloadString("https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Search")
''//POST our actual data and get the results
Dim S = WC.UploadString("https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Results", "POST", "term_code=201130&search_type=K&keyword=math")
Trace.WriteLine(S)
End Using
End Sub
End Class
Public Class CookieAwareWebClient
Inherits WebClient
Private cc As New CookieContainer()
Private lastPage As String
Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
Dim R = MyBase.GetWebRequest(address)
If TypeOf R Is HttpWebRequest Then
With DirectCast(R, HttpWebRequest)
.CookieContainer = cc
If Not lastPage Is Nothing Then
.Referer = lastPage
End If
End With
End If
lastPage = address.ToString()
Return R
End Function
End Class