webservice的POST和GET请求调用

webservice的POST和GET请求调用

POST请求

1.发送请求

import java.io.DataOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import com.google.common.io.ByteStreams;

/**
 * HttpClient发送SOAP请求
 * @param wsdl url地址
 * @param xml   请求体参数
 * @return
 * @throws Exception
 */
public static String sendHttpPost(String wsdl, String xml) throws Exception{
    int timeout = 10000;
    // HttpClient发送SOAP请求
    System.out.println("HttpClient 发送SOAP请求");
    HttpClient client = new HttpClient();
    PostMethod postMethod = new PostMethod(wsdl);
    // 设置连接超时
    client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
    // 设置读取时间超时
    client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
    // 然后把Soap请求数据添加到PostMethod中
    RequestEntity requestEntity = new StringRequestEntity(xml, "text/xml", "UTF-8");
    // 设置请求体
    postMethod.setRequestEntity(requestEntity);
    int status = client.executeMethod(postMethod);
    // 打印请求状态码
    System.out.println("status:" + status);
    // 获取响应体输入流
    InputStream is = postMethod.getResponseBodyAsStream();
    // 获取请求结果字符串
    return new String(ByteStreams.toByteArray(is));
}

/**
 * HttpURLConnection 发送SOAP请求
 * @param wsdl url地址
 * @param xml   请求体参数
 * @return
 * @throws Exception
 */
public static String sendURLConnection(String wsdl, String xml) throws Exception{
    int timeout = 10000;
    // HttpURLConnection 发送SOAP请求
    System.out.println("HttpURLConnection 发送SOAP请求");
    URL url = new URL(wsdl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    conn.setRequestMethod("POST");
    conn.setUseCaches(false);
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setConnectTimeout(timeout);
    conn.setReadTimeout(timeout);

    DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
    dos.write(xml.getBytes("utf-8"));
    dos.flush();
    InputStream inputStream = conn.getInputStream();
    // 获取请求结果字符串
    return new String(ByteStreams.toByteArray(inputStream));
}

ByteStreams的maven


        com.google.guava
        guava
        27.0.1-jre
    

2.POST请求体

/**
 * POST请求体
 * @param map 请求参数
 * @param methodName 方法名
 * @return
 */
public static String getXml(Map map , String methodName){
    StringBuffer sb = new StringBuffer("");
    sb.append("");
    sb.append("");
    sb.append("");
    sb.append("<" + methodName + " xmlns='http://tempuri.org/'>");
    //post参数
    for (String str : map.keySet()){
        sb.append("<"+str+">"+map.get(str)+"");
    }
    sb.append("");
    sb.append("");
    sb.append("");

    return sb.toString();
}

3.测试

/**
* HTTP POST请求
*/

public static void main(String[] args) throws Exception{
    String wsdl = "http://IP:端口/xxx?wsdl";
    String methodName = "方法名";
    Map map = new HashMap<>();
    map.put("参数名","参数值");
    //请求体xml
    String xml = getXml(map, methodName);
    //发送请求
    String s = sendHttpPost(wsdl, xml);
    System.out.println(s);
}

GET请求

/**
* 发送请求
*/

import com.google.common.io.ByteStreams;
import org.apache.commons.httpclient.HttpStatus;
import org.codehaus.jettison.json.JSONObject;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public static void main(String[] args) throws Exception{
	String url = "http://IP:端口/xxx/方法名?参数名=参数值";
    Map result = new HashMap(16);
    try {
        URL url = new URL(url);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();

        //设置输入输出,因为默认新创建的connection没有读写权限,
        connection.setDoInput(true);
        connection.setDoOutput(true);

        //接收服务端响应
        int responseCode = connection.getResponseCode();

        if(HttpStatus.SC_OK == responseCode){//表示服务端响应成功
            InputStream is = connection.getInputStream();
            //响应结果
            String s = new String(ByteStreams.toByteArray(is));
            result = com.alibaba.fastjson.JSONObject.parseObject(s, Map.class);
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("查询在线状态1:"+e.getMessage());
    }
    System.out.println(result);
}

你可能感兴趣的:(webservice)