public class HttpCaller extends Object
import com.alibaba.csb.sdk.HttpCaller; import com.alibaba.csb.sdk.HttpCallerException; ... (1) 直接调用方式 (已过期,不推荐) Map<String,String> params = new HashMap<String,String>(); Object smd = ... // 一个具体的复杂对象 if (smd != null) { String data = JSON.toJSONString(smd); //转换为JSON String params.put("data", data); } // -- Tip: 如果调用者无法获得复杂对象参数类,则可以使用全map的方式设置json串,举例,对于json串 // {"f1":{"f11":"v11", "f12":["v121","v122"]}, "f2":"wiseking"} // 它是可以通过如下的方式进行转换而来 Map<String,Object> map = new HashMap<String,Object>(); Map<String,Object> mapF1 = new HashMap<String,Object>(); mapF1.put("f11", "v11"); mapF1.put("f12", Arrays.asList("v121","v122")); map.put("f1", mapF1); map.put("f2", "wiseking"); String jsonData = JSON.toJSONString(map); // -- Tip End params.put("name", "abcd"); //普通的串对象 params.put("password", "abcd"); //普通的串对象 String requestURL = "http://gateway.abc.com:8086/CSB"; String API_NAME = "login_system"; String version = "1.0.0"; String ak = "xxxxxx"; String sk = "xxxxxx"; //用户安全校验的签名密钥对 try { String result = HttpCaller.doPost(requestURL, API_NAME, version, params, ak, sk); if (result != null) { //返回结果处理, 如转换为JSON对象 ... } } catch (HttpCallerException ie) { //print error }(2) 也可以使用第二种Builder的方式构造调用参数,然后进行调用 (推荐用法) import com.alibaba.csb.sdk.HttpParameters; import com.alibaba.csb.sdk.HttpCaller; import com.alibaba.csb.sdk.HttpCallerException; HttpParameters.Builder builder = HttpParameters.newBuilder(); builder.requestURL("http://broker-ip:8086/CSB?arg0=123") // 设置请求的URL .api("test") // 设置服务名 .version("1.0.0") // 设置版本号 .method("get") // 设置调用方式, get/post .accessKey("ak").secretKey("sk"); // 设置accessKey 和 设置secretKey // 设置请求参数 builder.putParamsMap("key1", "value1"); builder.putParamsMap("key2", "{\"a\":value1}"); // json format value //设置请求调用方式 builder.method("get"); //设置透传的HTTP Headers builder.putHeaderParamsMap("header1", "value1"); builder.putHeaderParamsMap("header2", "value2"); //进行调用 返回结果 String result = null; try { result = HttpCaller.invoke(builder.build()); } catch (HttpCallerException e) { // error process } try { // 重启设置请求参数 builder.clearParamsMap(); builder.putParamsMap("key1", "value1---new"); builder.putParamsMap("key2", "{\"a\":\"value1-new\"}"); // 使用post方式调用 builder.method("post"); HttpCaller.invoke(builder.build()); } catch (HttpCallerException e) { // error process } (3) 如果使用json或者bytes内容的作为http body,使用下面的方法 //构造ContentBody对象 ContentBody cb = new ContentBody(jsonObject.toSring()); //或者 cb = new ContentBody(file2bytes); //ContentBody传递,要求使用post方式进行调用 //如果需要传递请求参数 可以拼接到请求URL中,或者设置paramsMap参数由SDK内部进行拼接 HttpParameters.Builder builder = HttpParameters.newBuilder(); builder.requestURL("http://broker-ip:8086/CSB?arg0=123") // 设置请求的URL,可以拼接URL请求参数 .api("test") // 设置服务名 .version("1.0.0") // 设置版本号 .method("post") // 设置调用方式, 必须为 post .accessKey("ak").secretKey("sk"); // 设置accessKey 和 设置secretKey builder.contentBody(cb); //进行调用,返回结果 String result = null; try { result = HttpCaller.invoke(builder.build()); } catch (HttpCallerException e) { // error process } 高级功能 1. 设置代理地址 String proxyHost = "..."; int proxyPort = ...; HttpCaller.setProxyHost(proxyHost, proxyPort, null); //注意:本次设置只对本线程起作用 ... HttpCaller.doPost(), doGet() or invoke(); 2. 关于连接参数的设置: a. 可以为http/https设置以下的全局性系统参数: -Dhttp.caller.connection.max 设置连接池的最大连接数,默认是200 -Dhttp.caller.connection.timeout 设置连接超时时间(毫秒),默认是-1, 永不超时 -Dhttp.caller.connection.so.timeout 设置读取超时时间(毫秒),默认是-1, 永不超时 -Dhttp.caller.connection.cr.timeout 设置从连接池获取连接实例的超时(毫秒),默认是-1, 永不超时 -Dhttp.caller.connection.async 设置使用nio,默认fasle:同步io,true:nio -Dhttp.caller.connection.keepalive.timeout 长连接超时时间(秒),默认75 -Dhttp.caller.skip.connection.pool 如何设置为true,则不使用连接池。默认行为是false,使用连接池(支持长连接) b. 也可以使用下面的方法设置以上的某一个或者多个参数: MapsysParams = new HashMap (); sysParams.put("http.caller.connection.timeout","3000"); //设置连接超时为3秒 HttpCaller.setConnectionParams(sysParams); //注意:本次设置只对本线程起作用 ... HttpCaller.doPost(), doGet() or invoke(); 3. 设置debug: -Dhttp.caller.DEBUG=true
| 限定符和类型 | 字段和说明 |
|---|---|
static String |
DEFAULT_CHARSET |
static String |
GZIP |
static long |
TOTAL_FILE_SIZE |
static String |
trustCA |
| 限定符和类型 | 方法和说明 |
|---|---|
static String |
bizIdKey()
get bizIdkey
|
static void |
bizIdKey(String bizIdKey)
init bizIdKey
|
static String |
changeCharset(String result)
把一个串的字符集从"ISO-8859-1"改变到"UTF-8", 一个辅助方法,主要用于HTTP调用返回值的转换
|
static String |
changeCharset(String result,
String OldcharsetName,
String charsetName)
把一个串的字符集从旧的的字符集到一个新的字符集合, 一个辅助方法,主要用于HTTP调用返回值的转换
|
static String |
doGet(String requestURL)
以GET的方式发送URL请求
|
static String |
doGet(String requestURL,
String apiName,
Map<String,String> paramsMap)
已过时。
1. 新版本(1.0.2.1+)的CSB服务需要定义服务版本参数
2. 推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doGet(String requestURL,
String apiName,
Map<String,String> paramsMap,
String accessKey,
String secretKey)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doGet(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doGet(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey,
String signImpl,
String verifySignImpl)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
Map<String,String> paramsMap)
已过时。
1. 新版本的CSB服务需要定义服务版本参数
2. 推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
Map<String,String> paramsMap,
String accessKey,
String secretKey)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
Map<String,String> paramsMap,
String accessKey,
String secretKey,
String signImpl,
String verifySignImpl)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
String version,
ContentBody cb,
String accessKey,
String secretKey)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
String version,
ContentBody cb,
String accessKey,
String secretKey,
String signImpl,
String verifySignImpl)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static String |
doPost(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey,
String signImpl,
String verifySignImpl)
已过时。
推荐使用invoke()方法,并使用HttpParameters构造相关的参数
|
static Map<String,String> |
getCsbHeaders(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey)
获取签名串
|
static Map<String,String> |
getCsbHeaders(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey,
String charset)
获取签名串
|
static Map<String,String> |
getCsbHeaders(String requestURL,
String apiName,
String version,
Map<String,String> paramsMap,
String accessKey,
String secretKey,
String signImpl,
String verifySignImpl,
String charset,
String signAlgothrim)
获取签名串
|
static long |
getFutureGetTimeOut()
设置nio等待结果的时间,默认为3个等待时间总和外加0.1倍时间,0永不超时
|
static String |
invoke(HttpParameters hp)
使用invoke的方式进行http-api调用
|
static String |
invoke(HttpParameters hp,
Map<String,String> respHttpHeaderMap) |
static String |
invoke(HttpParameters hp,
StringBuffer resHttpHeaders)
使用invoke的方式进行http-api调用
|
static HttpReturn |
invokeReturn(HttpParameters hp)
新方法,支持复杂的返回对象(包括诊断信息)
|
static boolean |
isAsync()
判断是否使用NIO,由系统变量http.caller.connection.async设置,默认不用
|
static void |
main(String[] args) |
static byte[] |
readFile(File file) |
static byte[] |
readFileAsByteArray(String file)
一个便利方法,读取一个文件并把其内容转换为 byte[]
|
static byte[] |
readInputStream(InputStream inputStream) |
static void |
recoveryFileFromBytes(byte[] body,
String filePath,
String fileName)
把二进制数据恢复成文件
|
static void |
setConnectionParams(Map<String,String> params)
为接下来的调用设置新的连接参数。
|
static void |
setCredential(String accessKey,
String secretKey)
设置默认的AK/SK, 以后发送请求可以使用该默认值进行签名,
注意: 这个方法设置静态的accessKey,secretKey变量到HttpCaller中,所以会影响所有的使用HttpCaller的方法,即
如果调用方法不指定AK/SK, 会使用这里本方法设置的AK/SK.
|
static void |
setCurlResponse(boolean flag)
当参数flag设置为true时, 使当前调用doGet/doPost的线程不做真实的调用而是生成curl命令请求串返回
|
static void |
setProxyHost(String hostname,
int port,
String scheme)
为接下来的调用设置代理参数。
|
static void |
setToHttpRequest(boolean flag) |
static void |
warmup()
加载HttpSDK所需要的类 (如,签名相关的)
注意:这是一个高时间代价的启动方法,建议在整个JVM范围内,在使用HttpCaller调用具体的服务前,调用且只调用一次
|
public static final String trustCA
public static final long TOTAL_FILE_SIZE
public static void bizIdKey(String bizIdKey)
bizIdKey - public static String bizIdKey()
public static void warmup()
注意:这是一个高时间代价的启动方法,建议在整个JVM范围内,在使用HttpCaller调用具体的服务前,调用且只调用一次
public static void setProxyHost(String hostname, int port, String scheme)
hostname - port - scheme - 如果设置为null时, scheme为 "http"public static void setConnectionParams(Map<String,String> params)
params - public static void setCurlResponse(boolean flag)
flag - public static void setToHttpRequest(boolean flag)
public static void setCredential(String accessKey, String secretKey)
注意: 这个方法设置静态的accessKey,secretKey变量到HttpCaller中,所以会影响所有的使用HttpCaller的方法,即 如果调用方法不指定AK/SK, 会使用这里本方法设置的AK/SK.
accessKey - 访问keysecretKey - 安全keypublic static String changeCharset(String result, String OldcharsetName, String charsetName) throws HttpCallerException
result - 要装换的字符串OldcharsetName - 源编码方式charsetName - 目标编码方式HttpCallerExceptionpublic static String changeCharset(String result) throws HttpCallerException
result - 要装换的字符串HttpCallerExceptionpublic static String doGet(String requestURL, String apiName, Map<String,String> paramsMap) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSBapiName - API名字(服务名)paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值HttpCallerException - 调用过程中发生的任何异常public static String doGet(String requestURL, String apiName, Map<String,String> paramsMap, String accessKey, String secretKey) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8080/test/abcapiName - API名字(服务名)paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值accessKey - 访问keysecretKey - 安全keyxHttpCallerException - 调用过程中发生的任何异常public static String doGet(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值,如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理accessKey - 访问keysecretKey - 安全keyHttpCallerException - 调用过程中发生的任何异常public static String doGet(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey, String signImpl, String verifySignImpl) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值,如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理accessKey - 访问keysecretKey - 安全keysignImpl - 签名算法实现类名verifySignImpl - 验签算法实现类名HttpCallerException - 调用过程中发生的任何异常public static Map<String,String> getCsbHeaders(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值,如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理accessKey - 访问keysecretKey - 安全keyHttpCallerExceptionpublic static Map<String,String> getCsbHeaders(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey, String charset) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值,如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理accessKey - 访问keysecretKey - 安全keyHttpCallerExceptionpublic static Map<String,String> getCsbHeaders(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey, String signImpl, String verifySignImpl, String charset, String signAlgothrim) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值,如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理accessKey - 访问keysecretKey - 安全keysignImpl - 签名算法实现类名verifySignImpl - 验签算法实现类名charset - 字符集signAlgothrim - 签名算法HttpCallerExceptionpublic static String doGet(String requestURL) throws HttpCallerException
requestURL - 请求的服务URL, 如:"http://abc.com:8086/CSB?name=test&value=123"HttpCallerExceptionpublic static String doPost(String requestURL, String apiName, Map<String,String> paramsMap) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB/abc, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值HttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, String version, Map<String,String> paramsMap) throws HttpCallerException
requestURL: - 请求的服务URL, 如:http://abc.com:8086/CSB/abc, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName: - API名字(服务名)version: - API版本号paramsMap: - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值HttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, Map<String,String> paramsMap, String accessKey, String secretKey) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB/abc, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值accessKey - 访问keysecretKey - 安全keyHttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, Map<String,String> paramsMap, String accessKey, String secretKey, String signImpl, String verifySignImpl) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB/abc, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值accessKey - 访问keysecretKey - 安全keysignImpl - 签名算法实现类名verifySignImpl - 验签算法实现类名HttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, String version, ContentBody cb, String accessKey, String secretKey) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB/abc, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号cb - 直接设置contentBody, 内容可以是json串 或者 byte[]accessKey - 访问keysecretKey - 安全keyHttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, String version, ContentBody cb, String accessKey, String secretKey, String signImpl, String verifySignImpl) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSB/abc, 如果URL里的请求参数有特殊字符(如 '&'),需要先将次值进行URL Encode处理apiName - API名字(服务名)version - API版本号cb - 直接设置contentBody, 内容可以是json串 或者 byte[]accessKey - 访问keysecretKey - 安全keysignImpl - 签名算法实现类名verifySignImpl - 验签算法实现类名HttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSBapiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值accessKey - 访问keysecretKey - 安全keyHttpCallerException - 调用过程中发生的任何异常public static String doPost(String requestURL, String apiName, String version, Map<String,String> paramsMap, String accessKey, String secretKey, String signImpl, String verifySignImpl) throws HttpCallerException
requestURL - 请求的服务URL, 如:http://abc.com:8086/CSBapiName - API名字(服务名)version - API版本号paramsMap - 请求参数key-value参数列表,注:可以将JSON对象转换为String作为参数值accessKey - 访问keysecretKey - 安全keysignImpl - 签名算法实现类名verifySignImpl - 验签算法实现类名HttpCallerException - 调用过程中发生的任何异常public static String invoke(HttpParameters hp, Map<String,String> respHttpHeaderMap) throws HttpCallerException
respHttpHeaderMap - 当不为空时,会把所有http响应头放入此mapHttpCallerExceptionpublic static String invoke(HttpParameters hp, StringBuffer resHttpHeaders) throws HttpCallerException
hp - 各种请求参数的集合类resHttpHeaders - 当该传入参数不为空时,获取http response headers, {"key1":"value1","key2":"value2",...}HttpCallerExceptionpublic static HttpReturn invokeReturn(HttpParameters hp) throws HttpCallerException
hp - HttpCallerExceptionpublic static String invoke(HttpParameters hp) throws HttpCallerException
hp - 各种请求参数的集合类HttpCallerExceptionpublic static byte[] readFileAsByteArray(String file) throws HttpCallerException
file - 文件的全路径, 最大支持的上传文件的尺寸为10MHttpCallerExceptionpublic static byte[] readFile(File file)
public static byte[] readInputStream(InputStream inputStream)
public static void recoveryFileFromBytes(byte[] body,
String filePath,
String fileName)
throws HttpCallerException
body - filePath - fileName - HttpCallerExceptionpublic static boolean isAsync()
public static long getFutureGetTimeOut()
public static void main(String[] args)
Copyright © 2021 Alibaba Aliware CSB. All rights reserved.