以下是使用 Visual Basic(VB)语言通过HttpWebRequest和HttpWebResponse等相关类来实现功能的代码示例,即先向服务器上传图片并携带参数,然后根据返回的图片索引去循环查询服务器上该图片的处理信息
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 即可 一直取到答案为止 取到答案判断 一下答案的第一个字符串 如果为“#” 即为报错了 如果不是#开头 即为返回的答案