java如何根据PostMan发送请求设置接口请求工具类
作者:Dubbo-罗
在Java中调用第三方接口可以通过不同的方式,如使用GET、POST等请求,关键点包括设置正确的请求方式、URL、参数(params)、头信息(headers)和请求体(body),对于不同的数据格式,如XML和JSON,需在header中声明内容类型
java根据PostMan发送请求:设置接口请求工具类
我们使用java代码进行接口远程调用第三方接口时,总会抒写接口代码,那么有这么多种方式进行发送请求。那我们应该怎么使用呢?
比如有webservice接口,比如有Post请求的接口,必须有Get请求的接口。比如传的参数有xml的形式,比如传的参数有json格式等等格式情况,那我们的接口请求代码应该如何区别,抒写呢?
我们要根据postMan中的方式来,只要是能够通过postMan发送成功的请求都可以使用
首先是我们的请求方式
第一点:在postMan的请求方式有:GET、POST、PUT、DELETE请求。
第二点:在PostMan中我们需要传入url链接,那么new HttpGet(url)这里面的url就是链接地址。
GET:HttpGet httpGet = new HttpGet(url); POST:HttpPost method = new HttpPost(url); PUT:HttpPut put = new HttpPut(url); DELETE:HttpDelete delete = new HttpDelete(url);
第三点:在PostMan中我们需要Params的时候:
HttpParams httpParams = new BasicHttpParams(); httpParams.setParameter("",""); httpParams.setParameter("",""); httpParams.setParameter("",""); method.setParams(httpParams);
第四点:在PostMan中我们需要设置Headers,其中方token或者字节编码的时候很使用。
HttpPost method = new HttpPost(url); method.addHeader("",""); method.addHeader("",""); method.addHeader("","");
第五点:在PostMan中我们需要设置Body,其中需要传入参数,不管是xml还是json都可以。那么我们需要设置两个地方。
1、在第四点中的header中需要设置传入参数的是xml还是json:
method.addHeader("Content-Type","application/json;");这里是json method.addHeader("Content-Type","application/xml;");这里是xml
2、在传回来的参数中我们需要设置返回的数据类型和字符编码集:param是发送的body参数。
StringEntity entity = new StringEntity(param, "utf-8"); entity.setContentEncoding("UTF-8"); entity.setContentType("application/json;"); method.setEntity(entity);//放入到method请求中。
第六点:这样进行发送请求:method是集合请求方式,Params,Headers,body参数以后的集合。然后进行发送。
CloseableHttpClient httpClient = HttpClients.createDefault();//得到发送。 HttpResponse resultRep = httpClient.execute(method);
第七点:在PostMan中返回的数据,我们需要如下来接收:
/请求发送成功,并得到响应/
if (resultRep.getStatusLine().getStatusCode() == 200) { String str = ""; /**读取服务器返回过来的json字符串数据**/ log.info("=========测试"+resultRep.toString()); String str4 = EntityUtils.toString(resultRep.getEntity()); log.info("========str4"+str4); result = str4; }
举例如下
第一种方法:
public static String getwebserviceNew(String method,String serviceUrl,String user,String pw,String param){ try { //第一步:选择请求方式: PostMethod postMethod = null; postMethod = new PostMethod(); postMethod.setPath(serviceUrl); String auth = "bearer "+pw; //第二步:设置header参数 postMethod.addRequestHeader("Authorization", auth); postMethod.setRequestHeader("Content-Type", "text/xml") ; //第三步:得到需要发送的body String xmlInfo = getXmlInfo(method,user,pw,param); //第四步:设置发送的参数编码集: postMethod.setRequestEntity(new StringRequestEntity(xmlInfo.toString(),"application/xml","UTF-8")); org.apache.commons.httpclient.HttpClient httpClient = new org.apache.commons.httpclient.HttpClient(); //第五步:发送请求: int response = httpClient.executeMethod(postMethod); // 执行POST方法 log.info("response--接口状态码-->"+response); String result = postMethod.getResponseBodyAsString() ; log.info("result-接口返回值-->"+result); return result; } catch (Exception e) { log.info("e----->"+e); //logger.info("请求异常"+e.getMessage(),e); throw new RuntimeException(e.getMessage()); } } private static String getXmlInfo(String method,String fydm,String token,String xml) { StringBuilder sb = new StringBuilder(); sb.append("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:szft='http://szft.tdh/'>"); sb.append("<soapenv:Header/>"); sb.append("<soapenv:Body>"); sb.append("<szft:"+method+">"); sb.append("<fydm>"+fydm+"</fydm>"); sb.append("<token>"+token+"</token>"); sb.append("<xml>"+xml+"</xml>"); sb.append("</szft:"+method+">"); sb.append("</soapenv:Body>"); sb.append("</soapenv:Envelope>"); return sb.toString(); }
第二种方法:
/** * http请求接口,获取通达海token和获取通达海代理人使用 * post请求 * @param url url地址 * @param param 请求参数 * @param token token * @param ContentType 发送数据类型 * @return * @throws IOException * @throws ClientProtocolException */ public static String httpPostAllAgent(String url,String param,String token,String ContentType) throws ClientProtocolException, IOException{ try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } url = URLDecoder.decode(url, "UTF-8"); CloseableHttpClient httpClient = HttpClients.createDefault(); String result = null; HttpPost method = new HttpPost(url); Map<String, Object> headers = new HashMap<String, Object>(); headers.put("Content-Type", ContentType); headers.put("Accept-Charset", "charset=utf-8"); headers.put("Authorization", token); for (Map.Entry<String, Object> head : headers.entrySet()) { method.addHeader(head.getKey(), String.valueOf(head.getValue())); } //设置请求访问时间 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(1000*60).setConnectTimeout(1000*60).build();//设置请求和传输超时时间 method.setConfig(requestConfig); if (null != param) { StringEntity entity = new StringEntity(param, "utf-8"); entity.setContentEncoding("UTF-8"); entity.setContentType(ContentType); method.setEntity(entity); } HttpResponse resultRep = httpClient.execute(method); /**请求发送成功,并得到响应**/ if (resultRep.getStatusLine().getStatusCode() == 200) { String str = ""; /**读取服务器返回过来的json字符串数据**/ log.info("=========测试"+resultRep.toString()); String str4 = EntityUtils.toString(resultRep.getEntity()); log.info("========str4"+str4); result = str4; } return result; }
multipart/form-data请求方式:
public static String uploadFile(String url, Map<String, Object> mapData){ CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; //每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。 String boundary ="----WebKitFormBoundary5ZMULAAn6mngkXzn"; try { HttpPost httpPost = new HttpPost(url); //设置请求头 httpPost.setHeader("Content-Type","multipart/form-data; boundary="+boundary); //HttpEntity builder MultipartEntityBuilder builder = MultipartEntityBuilder.create(); //字符编码 builder.setCharset(Charset.forName("UTF-8")); //模拟浏览器 builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); //boundary builder.setBoundary(boundary); //multipart/form-data // builder.addPart("multipartFile",new FileBody(filePath)); // binary // builder.addBinaryBody("name=\"multipartFile\"; filename=\"test.docx\"", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流 // //其他参数 for (String key : mapData.keySet()) { builder.addTextBody(key, mapData.get(key).toString(), ContentType.create("text/plain", Consts.UTF_8)); } //HttpEntity HttpEntity entity = builder.build(); httpPost.setEntity(entity); // 执行提交 HttpResponse response = httpClient.execute(httpPost); //响应 HttpEntity responseEntity = response.getEntity(); if (responseEntity != null) { // 将响应内容转换为字符串 result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8")); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } System.err.println("result"+result); return result; }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。