java 代码仅供参考如有错误请联系客户,会提供技术支持
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class ImageUploadAndQuery {
// 定义最大查询次数,这里设置为60次,可根据实际情况调整
private static final int MAX_QUERY_TIMES = 60;
// 每次查询的间隔时间(单位:毫秒),这里设置为1000毫秒,即1秒,可按需调整
private static final long QUERY_INTERVAL = 1000;
public static void main(String[] args) {
// 图片文件的本地路径,替换为实际要上传的图片路径
String imagePath = "/path/to/your/image.jpg";
// 上传图片的服务器接口地址,替换为真实有效的地址
String uploadUrl = "http://dt1.hyocr.com:8080/uploadpic.php";
// 模拟多个请求参数,可根据实际情况替换具体值
Map parameters = new HashMap<>();
parameters.put("dati_type", "8091"); //答题类型
parameters.put("acc_str", "xxxxxxxxxxxx");//用户自己的答题串 以便计费 登录账号查询自己的答题密码串
parameters.put("extra_str", "题目是。。。。"); //描述问题内容,以便答题人员能够理解答题
parameters.put("zz", ""); //作者帐号(给予返利)
parameters.put("pri", "9"); //优先级
parameters.put("timeout", "70"); //答题时间不要太小,否则容易超时而不能返回结果
try {
String imageIndex = uploadImageWithParams(imagePath, uploadUrl, parameters);
if (imageIndex!= null && imageIndex.length()>0 && !imageIndex.startsWith("#")) {
queryImageInfo(imageIndex);
} else {
System.err.println("图片上传出错,错误信息: " + imageIndex);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static String uploadImageWithParams(String imagePath, String uploadUrl, Map parameters) throws IOException {
File imageFile = new File(imagePath);
URL url = new URL(uploadUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
connection.setDoOutput(true);
// 构建请求体
String boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
StringBuilder requestBodyBuilder = new StringBuilder();
// 添加参数部分到请求体
for (Map.Entry entry : parameters.entry()) {
requestBodyBuilder.append("--").append(boundary).append("\r\n");
requestBodyBuilder.append("Content-Disposition: form-data; name=\"").append(entry.getKey()).append("\"\r\n\r\n");
requestBodyBuilder.append(entry.getValue()).append("\r\n");
}
// 添加图片文件部分到请求体
requestBodyBuilder.append("--").append(boundary).append("\r\n");
requestBodyBuilder.append("Content-Disposition: form-data; name=\"pic\"; filename=\"").append(imageFile.getName()).append("\"\r\n");
requestBodyBuilder.append("Content-Type: image/jpeg\r\n\r\n");
// 将请求体字符串转换为字节数组
byte[] requestBodyPrefix = requestBodyBuilder.toString().getBytes("UTF-8");
// 获取输出流,先写入参数和图片头部相关字节
try (OutputStream outputStream = connection.getOutputStream()) {
outputStream.write(requestBodyPrefix);
// 再写入图片文件内容
try (FileInputStream fileInputStream = new FileInputStream(imageFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer))!= -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
// 写入结束边界字节
byte[] endBoundary = ("\r\n--" + boundary + "--\r\n").getBytes("UTF-8");
outputStream.write(endBoundary);
}
// 获取服务器响应
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine())!= null) {
response.append(line);
}
return response.toString();
}
} else {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) {
StringBuilder errorResponse = new StringBuilder();
String line;
while ((line = reader.readLine())!= null) {
errorResponse.append(line);
}
return "#" + errorResponse.toString();
}
}
}
public static void queryImageInfo(String imageIndex) throws IOException {
String queryUrl = "http://dt1.hyocr.com:8080/Query.php?sid=" + imageIndex;
URL url = new URL(queryUrl);
int queryTimes = 0;
while (queryTimes < MAX_QUERY_TIMES) {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
// 获取服务器响应
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine())!= null) {
response.append(line);
}
String result = response.toString().trim();
if (result.isEmpty()) {
System.out.println("服务器仍在处理图片,请稍候...");
} else if (result.startsWith("#")) {
System.err.println("图片处理出错,错误信息: " + result);
return result;
break;
} else {
System.out.println("图片处理成功,信息: " + result);
return result;
break;
}
}
} else {
System.err.println("查询图片信息时请求出错,状态码: " + responseCode);
break;
}
queryTimes++;
// 等待一段时间后再次查询
try {
Thread.sleep(QUERY_INTERVAL);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.err.println("查询等待过程被中断");
break;
}
}
if (queryTimes == MAX_QUERY_TIMES) {
System.err.println("已达到最大查询次数,仍未获取到有效图片处理信息");
}
return "#已达到最大查询次数";
}
}
说明:xxxxxxxxxxxxxxx替换成密码串 提交成功后会返回一组字符串 直接用这个字符串每1秒循环get提交到http://dt1.hyocr.com:8080/Query.php 即可 一直取到答案为止 取到答案判断 一下答案的第一个字符串 如果为“#” 即为报错了 如果不是#开头 即为返回的答案