Demo程序:
package org.acooly.onlycall.service; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.io.IOUtils; public class ServiceClientDemo { private static final String DEFAULT_ENCODING = "UTF-8"; private static final String SERVICE_ENDPOINT = "http://域名/service"; public static void main(String[] args) throws Exception { ServiceClientDemo demo = new ServiceClientDemo(); demo.testCqyhtService(); } public void testCqyhtService() { Map<String, String> parameters = new HashMap<String, String>(); parameters.put("Action", "CALL"); parameters.put("PhoneNo", "一号通号码"); parameters.put("Credential", "XXXXXX"); parameters.put("CallerNo", "主叫"); parameters.put("CalledNos", "被叫"); String queryString = getCanonicalizedQueryString(parameters, false); String requestUrl = SERVICE_ENDPOINT + "?" + queryString; System.out.println("Request: \n" + requestUrl); String response = httpSimpleRequest("GET", requestUrl, null); System.out.println("Response Body: \n" + response); } protected String httpSimpleRequest(String method, String requestUrl, Map<String, String> headers) { HttpURLConnection conn = null; InputStream in = null; String result = null; try { URL url = new URL(requestUrl); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(method); conn.setDoInput(true); conn.setDoOutput(true); if (headers != null) { for (Map.Entry<String, String> entry : headers.entrySet()) { conn.addRequestProperty(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8")); } } int status = conn.getResponseCode(); System.out.println("Response status: " + status); in = conn.getErrorStream(); if (in != null) { result = IOUtils.toString(in); } in = conn.getInputStream(); if (in != null) { result = IOUtils.toString(in); } } catch (Exception e) { System.err.println(e.getMessage()); } finally { IOUtils.closeQuietly(in); } return result; } protected String getCanonicalizedQueryString(Map<String, String> parameters, boolean encoding) { StringBuilder builder = new StringBuilder(); Iterator<Map.Entry<String, String>> pairs = parameters.entrySet().iterator(); while (pairs.hasNext()) { Map.Entry<String, String> pair = pairs.next(); String key = pair.getKey(); String value = pair.getValue(); builder.append(encoding ? urlEncode(key, false) : key); builder.append("="); builder.append(encoding ? urlEncode(value, false) : value); if (pairs.hasNext()) { builder.append("&"); } } return builder.toString(); } protected String urlEncode(String value, boolean path) { try { String encoded = URLEncoder.encode(value, DEFAULT_ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~"); if (path) { encoded = encoded.replace("%2F", "/"); } return encoded; } catch (UnsupportedEncodingException ex) { throw new RuntimeException(ex); } } }
运行结果:
Request: http://域名/service?Action=CALL&CalledNos=被叫&Credential=XXXXXX&CallerNo=主叫&PhoneNo=一号通号码 Response status: 200 Response Body: <?xml version="1.0" encoding="UTF-8"?> <Result> <Code>0001</Code> <Message>一号通号码不合法或用户被禁用</Message> </Result>