用VB.NET无法使用WININET中的InternetReadFile??
以下代码是从VB中转换过来的,我把它放到一个类模块里。
用来读取网页的源码,但是在运行到 bRet = InternetReadFile(hOpenUrl, sreadbuffer, 2048, lNumberOfBytesRead)
的时候总是失败,不知何故?
请不要告诉我说用httpwebrequest等等,因为特殊原因,我就要用这个API。
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const scUserAgent = "Microsoft Internet Explorer 6.0"
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As Integer
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Integer, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Integer, ByVal lFlags As Integer, ByVal lContext As Integer) As Integer
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Integer, ByVal sBuffer As String, ByVal lNumBytesToRead As Integer, ByVal lNumberOfBytesRead As Integer) As Boolean
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Integer) As Integer
Public Function GetUrlStr(ByVal URL As String) As String '调用时 URL 参数一定要带 http:// 前缀.
Dim hOpen As Integer
Dim hOpenUrl As Integer
Dim sUrl As String
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As New String(" ", 2048)
Dim lNumberOfBytesRead As Integer
Dim sBuffer As String = ""
sUrl = URL
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
bDoLoop = True
While bDoLoop
sreadbuffer = Nothing
bRet = InternetReadFile(hOpenUrl, sreadbuffer, 2048, lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
End While
GetUrlStr = sBuffer
If hOpenUrl <> 0 Then InternetCloseHandle(hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle(hOpen)
End Function