vb 代码

以下是使用 Visual Basic(VB)语言通过HttpWebRequest和HttpWebResponse等相关类来实现功能的代码示例,即先向服务器上传图片并携带参数,然后根据返回的图片索引去循环查询服务器上该图片的处理信息

vb 代码

 
Imports System.IO
Imports System.Net
Imports System.Text

Module ImageUploadAndQuery
    '最大查询次数
    Const MAX_QUERY_TIMES As Integer = 60
    '查询间隔时间(单位:毫秒)
    Const QUERY_INTERVAL As Integer = 1000

    Function UploadImageWithParams(ByVal imagePath As String, ByVal uploadUrl As String, ByVal parameters As Dictionary(Of String, String)) As String
        Dim request As HttpWebRequest = CType(WebRequest.Create(uploadUrl), HttpWebRequest)
        request.Method = "POST"
        request.ContentType = "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
        request.AllowWriteStreamBuffering = True

        Dim boundary As String = "----WebKitFormBoundary7MA4YWxkTrZu0gW"
        Dim requestBodyBuilder As New StringBuilder()

        '添加参数部分到请求体
        For Each param In parameters
            requestBodyBuilder.Append("--" & boundary & vbCrLf)
            requestBodyBuilder.Append("Content-Disposition: form-data; name=""" & param.Key & """&r&n&r&n")
            requestBodyBuilder.Append(param.Value & vbCrLf)
        Next

        '添加图片文件部分到请求体
        requestBodyBuilder.Append("--" & boundary & vbCrLf)
        requestBodyBuilder.Append("Content-Disposition: form-data; name=""imageFile""; filename=""" & Path.GetFileName(imagePath) & """&r&n")
        requestBodyBuilder.Append("Content-Type: image/jpeg&r&n&r&n")

        Dim requestBodyPrefix As Byte() = Encoding.UTF8.GetBytes(requestBodyBuilder.ToString())

        request.ContentLength = requestBodyPrefix.Length

        Using requestStream As Stream = request.GetRequestStream()
            requestStream.Write(requestBodyPrefix, 0, requestBodyPrefix.Length)

            Using fileStream As New FileStream(imagePath, FileMode.Open, FileAccess.Read)
                Dim buffer(1023) As Byte
                Dim bytesRead As Integer
                While (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0
                    requestStream.Write(buffer, 0, bytesRead)
                End While
            End Using

            Dim endBoundary As Byte() = Encoding.UTF8.GetBytes(vbCrLf & "--" & boundary & "--" & vbCrLf)
            requestStream.Write(endBoundary, 0, endBoundary.Length)
        End Using

        Try
            Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
            Using reader As New StreamReader(response.GetResponseStream(), Encoding.UTF8)
                Return reader.ReadToEnd()
            End Using
        Catch ex As WebException
            Using errorResponse As HttpWebResponse = CType(ex.Response, HttpWebResponse)
                If errorResponse IsNot Nothing Then
                    Using reader As New StreamReader(errorResponse.GetResponseStream(), Encoding.UTF8)
                        Return "#" & reader.ReadToEnd()
                    End Using
                End If
            End Using
            Return "#" & ex.Message
        End Try
    End Function

    Sub QueryImageInfo(ByVal imageIndex As String)
        Dim queryUrl As String = "http://dt1.hyocr.com:8080/Query.php?sid=" & imageIndex
        Dim queryTimes As Integer = 0

        While queryTimes < MAX_QUERY_TIMES
            Dim request As HttpWebRequest = CType(WebRequest.Create(queryUrl), HttpWebRequest)
            request.Method = "GET"

            Try
                Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
                Using reader As New StreamReader(response.GetResponseStream(), Encoding.UTF8)
                    Dim result As String = reader.ReadToEnd().Trim()
                    If result = "" Then
                        Console.WriteLine("服务器仍在处理图片,请稍候...")
                    ElseIf result.StartsWith("#") Then
                        Console.WriteLine("图片处理出错,错误信息: " & result)
                        Exit While
                    Else
                        Console.WriteLine("图片处理成功,信息: " & result)
                        Exit While
                    End If
                End Using
            Catch ex As WebException
                Console.WriteLine("查询图片信息时请求出错,错误信息: " & ex.Message)
                Exit While
            End Try

            queryTimes += 1
            System.Threading.Thread.Sleep(QUERY_INTERVAL)
        End While

        If queryTimes = MAX_QUERY_TIMES Then
            Console.WriteLine("已达到最大查询次数,仍未获取到有效图片处理信息")
        End If
    End Sub

    Sub Main()
        '图片文件的本地路径,替换为实际要上传的图片路径
        Dim imagePath As String = "C:\path\to\your\image.jpg"
        '上传图片的服务器接口地址,替换为真实有效的地址
        Dim uploadUrl As String = "http://dt1.hyocr.com:8080/uploadpic.php"
         
        Dim parameters As New Dictionary(Of String, String)()
        ' //答题类型
		parameters.Add("dati_type", "8091") 
        ' 用户自己的答题串 以便计费 登录账号查询自己的答题密码串
		parameters.Add("acc_str", "xxxxxxxxxxxx") 
        ' 描述问题内容,以便答题人员能够理解答题
		parameters.Add("extra_str", "题目是...") 
        ' 作者帐号(给予返利)
		parameters.Add("zz", "作者帐号(给予返利)") 
        ' 优先级
		parameters.Add("pri", "9") 
        ' 答题时间不要太小,否则容易超时而不能返回结果 
		parameters.Add("timeout", "70 ")  
		
		 

        Dim imageIndex As String = UploadImageWithParams(imagePath, uploadUrl, parameters)
        If imageIndex <> "" AndAlso Not imageIndex.StartsWith("#") Then
            QueryImageInfo(imageIndex)
        Else
            Console.WriteLine("图片上传出错,错误信息: " & imageIndex)
        End If
    End Sub
End Module

说明:xxxxxxxxxxxxxxx替换成密码串 提交成功后会返回一组字符串 直接用这个字符串每1秒循环get提交到http://dt1.hyocr.com:8080/Query.php 即可 一直取到答案为止 取到答案判断 一下答案的第一个字符串 如果为“#” 即为报错了 如果不是#开头 即为返回的答案