• 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
  • 相关阅读:
    大型web系统数据缓存设计
    配置AndroidStudio
    android-studio 安装gradle
    Gradle的简介与安装
    史上最详细的Android Studio系列教程四--Gradle基础
    Android SDK
    如何让猎头找到你
    android-volley-manager
    Android Studio导入Project的方法
    设置Android Studio启动时可选最近打开过的工程
  • 原文地址:https://www.cnblogs.com/zhulibin2012/p/10697663.html
Copyright © 2020-2023  润新知