zhulibin2012

java的http请求实例

package vqmp.data.pull.vqmpull.common.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import vqmp.data.pull.vqmpull.common.enums.ResultEnum;
import vqmp.data.pull.vqmpull.common.exception.VQMPException;

import java.util.List;

/**
 * @author 01372231
 * @
 * @date 2019/3/4 15:14
 */
public class RequestUtil {
    private static final Logger logger = LoggerFactory.getLogger(RequestUtil.class);

    private RequestUtil() {
        throw new IllegalAccessError("Instantiate me is forbid");
    }


    /**
     * 
     *
     * @return 返回cookie值
     * @throws Exception 获取token失败
     */
    public static List<String> getItobToken(String itobTokenUrl) {

        LinkedMultiValueMap<String, String> body = new LinkedMultiValueMap();
        body.add("userRole", "VIP");
        body.add("centerName", "SF");

        ResponseEntity request = requestEntity(itobTokenUrl, HttpMethod.POST, body, new HttpHeaders());
        HttpHeaders headers = request.getHeaders();
        List<String> strings = headers.get("Set-Cookie");
        if (null == strings) {
            logger.error("url{}-获取token失败", itobTokenUrl);
            throw new VQMPException(ResultEnum.FAIL.getCode(), "获取token失败");
        }

        //获取jira数据
        return strings;
    }

    public static ResponseEntity requestEntity(String url, HttpMethod method, MultiValueMap<String, String> body, HttpHeaders headers) {
        logger.info("发送请求地址url:{}", url);
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setConnectTimeout(10000);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        if (method.equals(HttpMethod.POST)) {
            headers.set("Content-Type", "application/x-www-form-urlencoded");
        }
        HttpEntity entity = null;
        if (null != body) {
            entity = new HttpEntity(body, headers);
        } else {
            entity = new HttpEntity(headers);

        }
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, entity, String.class);
        if (responseEntity.getStatusCode() == HttpStatus.REQUEST_TIMEOUT) {
            logger.error("接口请求超时,接口地址: {}", url);
            throw new VQMPException("接口" + url + "请求超时");
        }

        return responseEntity;

    }

    /**
     * get response body
     *
     * @param url     request url
     * @param method  reuqest method
     * @param body    request params
     * @param headers request headers
     * @return
     * @throws Exception
     */
    public static String request(String url, HttpMethod method, MultiValueMap<String, Object> body, HttpHeaders headers) {
        logger.info("发送请求地址url:{}", url);
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setConnectTimeout(10000);
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        headers.set("Content-Type", "application/x-www-form-urlencoded");
        HttpEntity entity = new HttpEntity(body, headers);

        ResponseEntity<String> responseEntity = restTemplate.exchange(url, method, entity, String.class);
        if (responseEntity.getStatusCode() == HttpStatus.REQUEST_TIMEOUT) {
            logger.error("接口请求超时,接口地址: {}", url);
            throw new VQMPException("接口" + url + "请求超时");
        }
        if (responseEntity.getStatusCode().value() != 200) {
            throw new VQMPException(String.format("tcmp响应报错 : {} ", responseEntity.toString()));
        }

        return responseEntity.getBody();

    }

}
View Code

 

package com.sf.tcmp.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 
 * @author 01368324
 *
 */
public final class RequestAPIUtil {

    private static final Logger logger = LoggerFactory.getLogger(RequestAPIUtil.class);

    private  static final String LOGSTRING = "接口地址:{},接口名:{}";

    private RequestAPIUtil(){
        throw new IllegalAccessError("Instantiate me is forbid");
    }
    
    /**
     * Jira 的webService接口请求
     * @param urlStr 请求url
     * @param apiName 接口名
     * @param arg 参数
     * @return
     */
    public static  String postRequest(String urlStr,String apiName,String arg){
        String result = "";
        try {
            URL url = new URL(urlStr);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            con.setConnectTimeout(10000);
            con.setRequestProperty("Content-Type", "application/xml;");
            OutputStream oStream = con.getOutputStream();
            String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
            "<soapenv:Envelope "+
            "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
            "xmlns:gs=\"http://server.itms.inf.itdd.sf.com/\">"+
            "  <soapenv:Header/>"+
            "  <soapenv:Body>";
            
            soap = soap+"    <gs:"+apiName+">";
            soap=soap+"      <arg0>" + arg + "</arg0>";
                
            soap = soap+"    </gs:"+apiName+">";
           soap = soap+"  </soap:Body>"+ 
            "</soapenv:Envelope>";
            oStream.write(soap.getBytes());
            oStream.close();
            InputStream iStream = con.getInputStream();
            Reader reader = new InputStreamReader(iStream,"utf-8");

            int tempChar;
            String str = new String("");
            while((tempChar = reader.read()) != -1){
                str += Character.toString ((char)tempChar);
            }
            //下面这行输出返回的xml到控制台,相关的解析操作大家自己动手喽。
            //如果想要简单的话,也可以用正则表达式取结果出来。
            result = str.substring(str.indexOf("<return>")+8, str.indexOf("</return>"));
            iStream.close();
            oStream.close();
            con.disconnect();
        } catch (ConnectException  e){
           logger.error(LOGSTRING,urlStr,apiName,e);
        }catch (IOException e) {
            logger.error(LOGSTRING,urlStr,apiName,e);
        }    catch (Exception e){
           logger.error(LOGSTRING,urlStr,apiName,e);
          }
        return result;        
    }
    /**
     * webservice接口请求demo
     * @return
     */
    public static String requestDemo(){
        String result = "";
        try {
               //http://10.202.6.70:6060/itdd-app/inf-ws/SyncITMSData
            String urlStr = "";
            URL url = new URL(urlStr);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
            OutputStream oStream = con.getOutputStream();
            //下面这行代码是用字符串拼出要发送的xml,xml的内容是从测试软件里拷贝出来的
            //需要注意的是,有些空格不要弄丢哦,要不然会报500错误的。
            //参数什么的,你可以封装一下方法,自动生成对应的xml脚本
            String soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
            "<soapenv:Envelope "+
            "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" "+
            "xmlns:gs=\"http://server.itms.inf.itdd.sf.com/\">"+
            "  <soapenv:Header/>"+
            "  <soapenv:Body>"+ 
            "    <gs:getVersionBySysCode>"+
            "      <arg0>" + "ESG-SDEIS-CORE" + "</arg0>"+
            "    </gs:getVersionBySysCode>"+
            "  </soap:Body>"+ 
            "</soapenv:Envelope>";
            oStream.write(soap.getBytes());
            oStream.close();
            InputStream iStream = con.getInputStream();
            Reader reader = new InputStreamReader(iStream);

            int tempChar;
            StringBuilder str = new StringBuilder();
            while((tempChar = reader.read()) != -1){
                str.append(Character.toString((char) tempChar));
            }
            //下面这行输出返回的xml到控制台,相关的解析操作大家自己动手喽。
            //如果想要简单的话,也可以用正则表达式取结果出来。
            result = str.substring(str.indexOf("<return>")+8, str.indexOf("</return>"));
            iStream.close();
            oStream.close();
            con.disconnect();
        } catch (Exception e) {
        logger.error("content:",e);
        }
        return result;
    }
}
View Code

 

posted on 2019-04-12 18:05  zhulibin2012  阅读(477)  评论(0编辑  收藏  举报

导航