2011-11-15 51 views
0

我有下面的代码,我试图检索HTML文档。不知道为什么它不起作用。WebClient DownloadString错误:“底层连接已关闭:发送时发生意外错误。”

这是我从现场HTTP头捕获:

request# POST https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Results POST /BANPROD/pkgyc_yccsweb.P_Results

term_code=201130&search_type=A&keyword=&kw_scope=all&kw_opt=all&subj_code=BIO&crse_numb=205&campus=&instructor=&instr_session=*&attr_type=*&mon=on&tue=on&wed=on&thu=on&fri=on&sat=on&sun=on&avail_flag=on

,这里是我使用的代码:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

     mWC = New WebClient 
     wbParameters = New NameValueCollection 
    wbParameters.Add("term_code", "201130") 
    wbParameters.Add("search_type", "A") 
    wbParameters.Add("keyword", "") 
    wbParameters.Add("kw_scope", "all") 
    wbParameters.Add("kw_opt", "all") 
    wbParameters.Add("subj_code", "BIO") 
    wbParameters.Add("crse_numb", "205") 
    wbParameters.Add("campus", "*") 
    wbParameters.Add("instructor", "*") 
    wbParameters.Add("instr_session", "*") 
    wbParameters.Add("attr_type", "*") 
    wbParameters.Add("mon", "on") 
    wbParameters.Add("tue", "on") 
    wbParameters.Add("wed", "on") 
    wbParameters.Add("thu", "on") 
    wbParameters.Add("fri", "on") 
    wbParameters.Add("sat", "on") 
    wbParameters.Add("sun", "on") 
    wbParameters.Add("avail_flag", "on") 

    mWC.QueryString = wbParameters 
    Try 
     mWC.Headers(HttpRequestHeader.UserAgent) = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; Media Center PC 4.0; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 
     mWC.Headers(HttpRequestHeader.AcceptEncoding) = "gzip, deflate" 
     mWC.Headers(HttpRequestHeader.Accept) = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-xpsdocument, */*" 
     mWC.Headers(HttpRequestHeader.KeepAlive) = False 

     Try 
      Dim sResult As String = mWC.DownloadString(New Uri("https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Results")) 
      MsgBox(sResult) 
     Catch ex As Exception 
      MsgBox(ex.InnerException.Message) 
      Try 
       Dim sResult As String = mWC.DownloadString(New Uri("https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Search")) 
       MsgBox(sResult) 
      Catch ex2 As Exception 
       MsgBox(ex.Message) 
       Try 
        Dim bytResults() As Byte = mWC.UploadValues(New Uri("https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Results"), wbParameters) 

       Catch ex3 As Exception 
        MsgBox("Didn't work " & ex3.Message) 
       End Try 
      End Try 

     End Try 

    Catch ex As Exception 
     My.Computer.Clipboard.SetText(ex.Message) 
     MsgBox(ex.Message) 
    End Try 

    Try 
     Dim wbr As HttpWebRequest = WebRequest.Create("https://taylor.yc.edu/BANPROD/pkgyc_yccsweb.P_Results") 
     wbr.KeepAlive = False 
     wbr.Timeout = 600000 
     wbr.ReadWriteTimeout = 600000 
     wbr.Method = "POST" 
     wbr.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; Media Center PC 4.0; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 
     wbr.CookieContainer = New CookieContainer() 
     'wbr.ContentLength = formData.Length 

     'Dim requestStream As Stream = wbr.GetRequestStream() 
     'MsgBox(requestStream.Read) 
     'requestStream.Close() 


     MsgBox(wbr.GetResponse().ToString) 



    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

感谢您的帮助!我从来没有能够让webclient工作,所以这对我来说将是一个很好的突破!

回答

0

回答这个问题是在另外一个问题,我问here.

回答原来我需要保留饼干为了得到它的工作。并且做得有点不同。

1

我想你想使用UploadValues方法,使表单POST:

// Add necessary parameter/value pairs to the name/value container. 
myNameValueCollection.Add("Name",name);    
myNameValueCollection.Add("Address",address); 
myNameValueCollection.Add("Age",age); 


// 'The UploadValues(String,NameValueCollection)' implicitly sets HTTP POST as the request method.    
byte[] responseArray = myWebClient.UploadValues(uriString,myNameValueCollection); 
+0

我给了一个镜头,它没有奏效。我把它放在我原来的文章中的代码中,这样你就可以看到我做了什么。对不起,代码看起来有多混乱。 – Jon49

+0

这是我做的第三次尝试,顺便说一句。 – Jon49

相关问题