1.交互模式
交互模式为:请求/响应交互模式。需要数据一方作为请求方,提供数据一方作为响应方。请求方发送一个带有参数的报文到响应方,响应方根据请求ip地址、报文中的参数等判断请求是否合法,如果不合法,返回包含错误信息报文,如果合法,则根据请求报文中的参数获取相应的数据,然后组装成响应报文发送回请求方。
请求方可以是java程序、.net程序、php程序等,响应方是一个servlet。为了简单起见,一个servlet对应一个接口。
2.接口
接口的请求和响应采用 XML 作为具体业务报文的载体,请求为POST 方式,
传输时的charset 需要设置为utf-8
2.1巡检报表接口
2.1.1说明
巡检报表需要显示的数据如下图:
地市 |
代理公司 |
区县 | 专业 |
人员 | 开始日期 | 结束日期 | 计划明细数 | 合格明细数 | 巡检率 |
巡检报表响应地址:http://xxx.xxx.xxx.xxx/xxxservlet
2.1.2请求报文
报文格式
xml version="1.0" encoding="UTF-8"?>
<report_data>
<request_req>953947334request_req>
<request_time>2012040211394324request_time>
<request_param>
<query_month>201203query_month>
request_param>
report_data>
报文解释
节点名称 |
中文名称 |
类型 |
说明 |
request_req |
请求流水号 |
String(32) |
每笔请求的流水号必须不同,以示区分 |
request_time |
请求时间 |
String(14) |
发起请求段时间,格式:yyymmddhhnnss |
query_month |
月份 |
String(6) |
需要获取数据的月份 |
2.1.3响应返回报文
报文格式
xml version="1.0" encoding="UTF-8"?>
<report_data>
<respon_req>953947334respon_req>
<respon_time>20120402113943respon_time>
<result>
<id>0000id>
<comment>成功comment>
result>
<items>
<item>
<county>长治县county>
<company>铁通company>
<speciality>线路speciality>
<personnel>王加和personnel>
<begin_time>20120301000000begin_time>
<end_time>20120331235959end_time>
<plan_quantity>50plan_quantity>
<checkout_quantity>40checkout_quantity>
<patrol_rate>0.80patrol_rate>
item>
<item>
<county>长治县county>
<company>晋通管道维护公司company>
<speciality>线路speciality>
<personnel>李小林personnel>
<begin_time>20120301000000begin_time>
<end_time>20120331235959end_time>
<plan_quantity>30plan_quantity>
<checkout_quantity>10checkout_quantity>
<patrol_rate>0.66patrol_rate>
item>
<item>
<county>方山县county>
<company>晋通管道维护公司company>
<speciality>线路speciality>
<personnel>陈强personnel>
<begin_time>20120301000000begin_time>
<end_time>20120331235959end_time>
<plan_quantity>60plan_quantity>
<checkout_quantity>30checkout_quantity>
<patrol_rate>0.50patrol_rate>
item>
......
items>
report_data>
报文解释
节点名称 |
中文名称 |
类型 |
说明 |
respon_req |
响应流水号 |
String(32) |
每笔响应的流水号必须不同,以示区分 |
respon_time |
响应时间 |
String(14) |
响应时间,格式:yyymmddhhnnss |
id |
响应码 |
String(5) |
系统返回的处理结果,详见 接口返回错误码表 |
comment |
响应码解释 |
String(500) |
响应码对应中文注解 |
county |
县区 |
String(10) |
县区名称 |
company |
代维公司 |
String(30) |
代维公司名称 |
speciality |
专业 |
String(10) |
专业名称 |
personnel |
人员 |
String(20) |
巡检人员名称 |
begin_time |
开始时间 |
String(14) |
开始时间, 格式:yyymmddhhnnss |
end_time |
结束时间 |
String(14) |
结束时间, 格式:yyymmddhhnnss |
plan_quantity |
计划明细数 |
Number(7) |
计划明细数 |
checkout_quantity |
合格明细数 |
Number(7) |
合格明细数 |
patrol_rate |
巡检率 |
Number(7) |
巡检率 |
备注:如请求非法或参数错误,则响应报文中无items节点
2.2xxxx报表接口
2.3xxxx报表接口
2.4xxxx报表接口
4.接口错误返回码
响应代码 |
代码解释 |
0000 |
交易成功 |
0010 |
请求IP地址非法 |
0020 |
请求报文解析错误 |
0030 |
无法获取请求报文 |
0040 |
该接口不支持GET 方式,请以POST 方式提交 |
...... |
...... |
5.程序示例
5.1请求程序代码
public void sendMessage() throws Exception {
System.out.println("调用servlet开始=================");
StringBuffer sendStr = new StringBuffer();
sendStr.append("");
sendStr.append("
sendStr.append("
sendStr.append("
sendStr.append("
sendStr.append("
sendStr.append("");
sendStr.append("");
BufferedReader reader = null;
try {
String strMessage = "";
StringBuffer buffer = new StringBuffer();
// 接报文的地址
URL uploadServlet = new URL(
"http://localhost:9090/TestTransfers");
HttpURLConnection servletConnection = (HttpURLConnection) uploadServlet
.openConnection();
// 设置连接参数
servletConnection.setRequestMethod("POST");
servletConnection.setDoOutput(true);
servletConnection.setDoInput(true);
servletConnection.setAllowUserInteraction(true);
// 开启流,写入XML数据
OutputStream output = servletConnection.getOutputStream();
System.out.println("发送的报文:");
System.out.println(sendStr.toString());
output.write(sendStr.toString().getBytes());
output.flush();
output.close();
// 获取返回的数据
InputStream inputStream = servletConnection.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
while ((strMessage = reader.readLine()) != null) {
buffer.append(strMessage);
}
System.out.println("接收返回值:" + buffer);
} catch (java.net.ConnectException e) {
throw new Exception();
} finally {
if (reader != null) {
reader.close();
}
}
}
5.2响应程序代码
public class TestTransfers extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//判断请求报文是否来自代维系统的ip地址
String ip = request.getRemoteHost();
// 获取收到的报文
BufferedReader reader = request.getReader();
String line = "";
StringBuffer inputString = new StringBuffer();
while ((line = reader.readLine()) != null) {
inputString.append(line);
}
//如有必要,可以在报文中增加其他验证和加密的参数
//解析获取到的报文,根据ip地址、其他验证、加密等等来判断请求报文的服务器是否有权限
//如果请求验证合格,则根据请求的参数装配返回的报文
// 要返回的报文
StringBuffer resultBuffer = new StringBuffer();
resultBuffer.append("");
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("");
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("
resultBuffer.append("");
//......
//......
//......
//循环组装响应的报文
resultBuffer.append("");
resultBuffer.append("");
// 设置发送报文的格式
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(resultBuffer.toString());
out.flush();
out.close();
}
}
给你一个吧,这个能抓取任何程序
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class WebClient{
public static String getWebContent(String urlString,final String charset,int timeout) throws IOException {
if(urlString==null||urlString.length()==0) {
return null;
}
urlString = (urlString.startsWith("http://") || urlString
.startsWith("https://")) ? urlString : ("http://" + urlString)
.intern();
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn
.setRequestProperty(
"User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");//增加报头,模拟浏览器,防止屏蔽
conn.setRequestProperty("Accept", "text/html");//只接受text/html类型,当然也可以接受图片,pdf,*/*任意,就是tomcat/conf/web里面定义那些
conn.setConnectTimeout(timeout);
try {
if(conn.getResponseCode()!=HttpURLConnection.HTTP_OK) {
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input,
charset));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line).append("\r\n");
}
if(reader!=null) {
reader.close();
}
if(conn!=null) {
conn.disconnect()();
}
return sb.toString();
}
public static String getWebContent(String urlString) throws IOException {
return getWebContent(urlString,"iso-8859-1",5000);
}
public static void main(String[]args) throws IOException {
String s = getWebContent("http://www.sina.com");
s = new String(s.getBytes("iso-8859-1"),"gb2312");
System.out.println(s);
}
}