0

我对 vb/.net 很陌生,我正在尝试做一些我可以在经典 vb 中轻松完成的事情。我想从 URL 获取网页的源 html。

我在 Visual Studio Express for Windows 8 中使用 vb.net。

我已经阅读了大量关于 HttpWebRequest 的内容,但我无法让它正常工作。

我曾一度让它返回 html 标头,但我想要页面的内容。现在,我什至不能把它找回来给我标题。最终,我想处理返回的 html,我将以老式方式(开始)并将返回的 html 作为字符串处理,但现在我只想获取页面。

我得到的代码是:

Dim URL As String = "http://www.crayola.com/"
Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(New Uri(URL))
txtHTML.Text = request.GetRequestStreamAsync().ToString()

任何人都可以帮我举个例子让我继续前进吗?

4

4 回答 4

1
Public Shared Function GetWebPageString(ByVal address As Uri) As String
        Using client As New Net.WebClient()
            Return client.DownloadString(address)
        End Using
End Function

还有DownloadStringAsync如果你不想阻止

于 2013-05-31T13:28:00.200 回答
1

您正在尝试以同步方式使用 Async 方法,这没有任何意义。如果您使用的是 .NET 4.5,您可以尝试使用标记调用方法,Async然后Await在调用时使用关键字GetRequestStreamAsync.

Public Sub MyDownloaderMethod() 

   Dim URL As String = "http://www.crayola.com/"
   Dim request As System.Net.HttpWebRequest 
       = System.Net.HttpWebRequest.Create(New Uri(URL))

   ' Use the Await keyword wait for the async task to complete.      
   Dim response = request.GetResponseAsync()
   txtHTML.Text = response.GetResponseStream().ToString()

End Function

有关使用 Await 关键字进行异步编程的更多信息,请参阅以下 MSDN 文章:http: //msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx

编辑

您收到错误是因为您正在尝试获取请求流(您发送给服务器的内容),而您真正想要的是响应流(服务器发送回给您的内容)。我已经更新了我的代码以WebResponse从您那里获取WebRequest,然后从中检索流。

于 2013-05-31T13:42:03.673 回答
0

request.GetRequestStreamAsync() 可能不是一种方法。我认为您正在从一个网站上抄袭代码,在该网站上有人为 HttpWebRequest 编写了自己的附加方法。尝试 request.GetResponse() 返回一个响应对象,然后在响应对象中,您可以检查流并在需要时将其转换为文本。

于 2013-05-31T13:30:01.863 回答
-1

这在 VB.Net 4.5 中对我有用

Public Async Sub GetHTML()

    Dim PageHTML as string
    Dim client As New HttpClient
    Dim getStringTask As Task(Of String) = client.GetStringAsync(PageURL)
    PageHTML = Await getStringTask
    MsgBox(PageHTML)

End Sub
于 2015-09-13T22:35:49.747 回答