一 前言
需要处理的问题是:后台数据库中的表有一个src属性,该属性列有四种不同的情况,这个属性是业务相关的,只能够在源码中可以查找到。由于涉及的数据库表有700多个,所以用这个工具来对表进行分类。先对表的src属性进行统一个假设,如果HTTP请求返回的是200,则说明与假设是匹配的,如果返回的是500错误,则进行下一次筛选。
二 POST实现
package urltest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
public class PostTest {
public static String sendPost(String url) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
/*用于装载HTTP请求的头信息,可以通过postman里面设置的信息进行填写,也可以通过查看一条正常的发送信息进行填写*/
conn.setRequestProperty("accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("Authorization", "Basic cm9vdDpwdWJsaWM=");
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
out.flush();
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
/*下面几行注释是用来接受post的返回值的代码,可以查看每一条请求返回的数据*/
// String line;
// while ((line = in.readLine()) != null) {
// result += line;
// }
result = "src = eml";
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
result = "src != eml";//这个主要是用于筛选出不能够匹配的表名
return result;
}
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}
三 测试类
package urltest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class TestClass { public static void main(String[] args) { /* 读取数据并输出结果 */ try {
/*br用于读取表名,bw用于输出结果*/ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("C:/Users/HZ08881/Desktop/TestTableSrc.txt")),"UTF-8")); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("C:/Users/HZ08881/Desktop/Result.txt")),"UTF-8")); String lineTxt = null; while ((lineTxt = br.readLine()) != null) { String[] urls = lineTxt.split(","); for (String url : urls) { String urlmid = "http://localhost:8181/dataview/select/c37e5169-8181-41f2-904a-afc414cb9867/"+url; String sr=PostTest.sendPost(urlmid); bw.write(url+" "+sr); bw.newLine(); } } br.close(); bw.close(); } catch (Exception e) { System.err.println("read errors :" + e); } } }
通过切换代码中的src属性,可以筛选出每一次假设的表名,从而达到每一个表匹配其对应属性的目的,不需去翻源码。
四 总结
HTTP的所有请求都是可以通过java代码来进行实现的,而且可以达到自己想要的效果。postman这种工具使用起来固然方便,但是它只用一些通用的功能,对于一些特殊的情形是无法处理的。所以遇到一些需要特殊处理的HTTP请求时,可以自己设计一个发送请求的java小工具。其中需要注意的点是:header内容往往是需要根据实际情况来配置,比如Authorization,如果配置不当的话,会报401缺少权限的错误。