VB6多線程執行Get請求(基於Curl庫)
HTTPClient_Multi_Get系列函數
說明
基於Curl庫,多線程Get方法請求內容。
支持http和https協議。
支持gzip、 deflate 、br自動解壓持續使用內存會不斷增長,達到一定峰值後不會繼續增長,使用完後內存自動回收支持返迴響應頭支持設置超時時間
參數
HTTPClient_Multi_New
MultiObj:多線程管理對象
MaxThreads:最大線程數
HTTPClient_Multi_AddGetTask
MultiObj:多線程管理對象
CurlTask:任務對象
URL:網址,支持http和https
RequestHeaders:向網址發起的請求頭
IsUTF8:是否是UTF8編碼。 0-非UTF8編碼,1-UTF8字符
ConnectTimeOut:連接超時時間,單位秒
TimeOut:總超時時間,單位秒
ResponseAuto Decode :是否自動解碼返回內容。比如IsUTF8=1時,自動將UTF8結果字符解碼為Ansi字符
HTTPClient_Multi_IsFinish
MultiObj:多線程管理對象
OK_Task:成功的任務對象
StrErr:錯誤信息
HTTPClient_Multi_GetResponse
CurlTask:任務對象
ResponseHeaders:請求後得到的響應頭
HTTPClient _Multi_TaskFree
MultiObj:多線程管理對象
CurlTask:任務對象
HTTPClient_Multi_Free
MultiObj:多線程管理對象
引用
Public Declare Function HTTPClient_Multi_New Lib "VB6Net.dll" (ByRef MultiObj As Long, Optional ByVal MaxThreads As Integer = 10) As String
Public Declare Function HTTPClient_Multi_AddGetTask Lib "VB6Net.dll" (ByRef MultiObj As Long, ByRef CurlTask As Long, ByRef URL As String, Optional ByRef Request Headers As String = "", Optional ByVal IsUTF8 As Integer = 1, Optional ByVal ConnectTimeOut As Integer = 5, Optional ByVal TimeOut As Integer = 60, Optional ByVal ResponseAutoDecode As Integer = 1) As String
Public Declare Function HTTPClient_Multi_IsFinish Lib "VB6Net.dll" (ByRef MultiObj As Long, ByRef OK_Task As Long, ByRef StrErr As String) As Boolean
Public Declare Function HTTPClient_Multi_GetResponse Lib "VB6Net.dll" (ByRef CurlTask As Long, Optional ByRef ResponseHeaders As String = "") As String
Public Declare Sub HTTPClient_Multi_TaskFree Lib "VB6Net.dll" (ByRef MultiObj As Long, ByRef CurlTask As Long)
Public Declare Sub HTTPClient_Multi_Free Lib "VB6Net.dll" (ByRef MultiObj As Long)
封裝UserControl後的使用示例
Dim Multi_Tasks() As String
Dim Multi_IsFinish As Boolean
Sub DoTask()
ReDim Multi_Tasks(2, 4)
Multi_Tasks(1, 1) = "https://www.baidu.com/"
Multi_Tasks(2, 1) = "1"
Multi_Tasks(1, 2) = "https://www.qq.com/"
Multi_Tasks(2, 2) = "0"
Multi_Tasks(1, 3) = "https://www.iqiyi.com/"
Multi_Tasks(2, 3) = "1"
Multi_Tasks(1, 4) = "https://www.sina.com.cn/"
Multi_Tasks(2, 4) = "1"
Multi_IsFinish = False
With MultiNet1 'MultiNet1是封裝的UserControl 詳見示例
.Multi_ThreadMax = 4
For i = 1 To UBound(Multi_Tasks, 2)
.AddGetTask Multi_Tasks(1, i), , Multi_Tasks(2, i)
Next
.Start
End With
Do While Multi_IsFinish = False
Do Events
Loop
ShowLog "執行完畢"
End Sub
Private Sub MultiNet1_OnFinish(ByVal Msg As String)
Multi_IsFinish = True
ShowLog Msg
End Sub
Private Sub MultiNet1_OnTaskFinish(ByVal TaskIndex As Integer, ByVal Thread Index As Integer, ByVal ThreadAddr As Long, ResponseHeaders As String , ResponseBody As String)
ShowLog "線程" & ThreadIndex & "(" & ThreadAddr & "):執行完畢" & vbTab & " √ " & TaskIndex & "-" & Multi_Tasks(1, TaskIndex) & vbTab & VBA .Left(ResponseBody, 200) & ".." & vbCrLf
End Sub
例子
運行結果
没有评论:
发表评论