用VB.NET无法使用WININET中的InternetReadFile??

thestronger 2010-01-01 11:03:52
以下代码是从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

...全文
50 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
timezone 2010-01-02
  • 打赏
  • 举报
回复
参考这个:
<DllImport("\disk\wininet.dll", EntryPoint:="InternetFindNextFile")> _
Private Shared Function InternetFindNextFile(ByVal hFind As Integer, ByVal lpvFindData As WIN32_FIND_DATA) As Boolean
End Function
<DllImport("\disk\wininet.dll", EntryPoint:="FtpFindFirstFile")> _
Private Shared Function FtpFindFirstFile(ByVal hConnect As Integer, _
ByVal lpszSearchFile As String, ByVal lpFindFileData As WIN32_FIND_DATA, _
ByVal dwFlags As Integer, ByVal dwContext As Integer) As Integer
End Function

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧