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://aa.fatiegongju.com/api/result?id=" & 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://aa.fatiegongju.com/api/upload"

         

        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://aa.fatiegongju.com/api/result 即可 一直取到答案为止 取到答案判断 一下答案的第一个字符串 如果为“#” 即为报错了 如果不是#开头 即为返回的答案