如何对第三方接口发送url请求
好的,今天我们来写一个,向第三方接口发送url请求。
想必我们平时也经常会遇到向第三方接口发送请求,有时有个对方提供的jar包方法方便些,填参数就行,但偶尔遇到某些参数写在了jar包里无法修改,而我们又必须要修改的时候就需要自己发送url请求过去。
或者活得苦一点,第三方干脆就给了个url链接跟要填的参数/(ㄒoㄒ)/~~
或者更过分一点,遇到老项目,传的还是xml格式
那看看我的方法,按需替换,增加一下字段就可以使用了
//方法名随便取一个
public String 方法名(String serviceId){
//这个就是url地址,防止被人攻击,随便写一个,自己替换一下
String addFirst = "http://11.1.11.111:1111/xxxxxx/xxxxxx?xxxxxx=&xxxxxx=&xxxxxx=xxxx";
HttpURLConnection con = null;
//要传过去的xml,别照抄啊,写你要的xml,菜鸟里有xml格式验证附上链接https://www.runoob.com/xml/xml-validator.html,不知道怎么写问第三方要传的内容,组一组就行了,要用json的换成json的数据就行了,防止泄露,我删点xml内容,没验证,可能格式错误了,自己替换一下
String requestBodyFirst = "<soapenv:Envelope xmlns:soapenv=\"http://xxxxxxxxxx\">" +
" <soapenv:Header/>" +
" <soapenv:Body>" +
" <urn:MT_ZHLH_DZJ_ECC_ORDER_DETAIL_REQ>" +
//要填进去内容可以像下面这样写
" <IV_NUMBER>"+serviceId+"</IV_NUMBER></urn:MT_ZHLH_DZJ_ECC_ORDER_DETAIL_REQ>" +
" </soapenv:Body>" +
"</soapenv:Envelope>";
HttpURLConnection con = null;
try {
//下面可以照抄
// 指定WebService服务的请求地址:
// 创建URL:
URL url = new URL(addFirst);
// 建立连接,并将连接强转为Http连接
URLConnection conn = url.openConnection();
con = (HttpURLConnection) conn;
// 设置请求方式和请求头:
con.setDoInput(true); // 是否有入参
con.setDoOutput(true); // 是否有出参
con.setRequestMethod("POST"); // 设置请求方式
con.setRequestProperty("content-type", "text/xml;charset=UTF-8");
//通过流的方式将请求体发送出去
OutputStream out = con.getOutputStream();
out.write(xml.getBytes());
out.close();
int code = con.getResponseCode();
//服务端返回正常
if (code == 200) {
InputStream is = con.getInputStream();
byte[] b = new byte[1024];
StringBuffer sb = new StringBuffer();
int len = 0;
while ((len = is.read(b)) != -1) {
String str = new String(b, 0, len, "UTF-8");
sb.append(str);
}
//回参xml转string
String xmlReturn = sb.toString();
is.close();
//好了,抄到这,下面根据不同三方接口的回参,因为我是xml回参,我就截取文字,我这先截取了一个大的数据,然后再获取里面的type
String type = xmlReturn.substring(xmlReturn.indexOf("<xml>") + 11, xmlReturn.indexOf("</xml>"));
type = type.substring(type.indexOf("<type>") + 6, type.indexOf("</type>"));
is.close();
//我这type=S代表成功查出来数据了
if (type.equals("S")) {
//截取body里所有数据回传到别的接口
re = xmlReturn.substring(xmlReturn.indexOf("<xmlbody>") + 11, xmlReturn.indexOf("</xmlbody>"));
return re;
} else {
return re = "false";
}
} else {
return re = "false";
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
if (con != null) {
con.disconnect();
}
}
return re;
}
好了,这个时候我们获得了回参里的所有主要数据,是不是还想知道知道怎么拿出里面的数据,我知道你懒得思考,上面方法里的截取字段可以直接用,比如你要获取回参xml里的ACCCC字段,用这句话
String ACCCC= re.substring(re.indexOf("<ACCCC>") + 7, re.indexOf("</ACCCC>"));
这个时候获取出来的ACCCC就是要的数据
ok今天的讲解结束了