关于这一次总结,中文转码问题
笔者刚碰到这个时候,也是一脸蒙蔽,因为使用的是
public String doHttpGet(String httpURL)throws IOException{
URLConnection connection = new URL(httpURL).openConnection();
connection.setRequestProperty("Charset", "UTF-8");//
HttpURLConnection httpUrlConnection = (HttpURLConnection) connection;
}
get方式做的请求处理,而这里在执行请求时,却报了400的错误,
可是将httpURL放在浏览器上又能执行,但是如果是httpURL没有中文,只包含数字和英文的字符串就不会报400的错误,所以笔者最终定位,这是一个关于中文转码的问题。
也是经历挫折,虽然知道是中文乱码,可是对于最终定位在格式转换的位置,也是测试了很久。最终定位在组装httpurl组装前进行中文转码。
param=URLEncoder.encode(param, "UTF-8");
因为签名里是不需要转码的,原因可能是签名已经经过了md5加密。
有的小伙伴可能觉得笔者说的,听得云里雾里,没关系,笔者这里在给大家捋一遍!还是从httpurl的组装开始说起!
调接抖店接口:
协议名 + 域名
https://openapi-fxg.jinritemai.com 协议名 + 域名 + 路径名
https://openapi-fxg.jinritemai.com/oauth2/access_token
协议名 + 域名 + 路径名 + 参数
https://openapi-fxg.jinritemai.com/oauth2/access_token
?app_id=KEY&app_secret=SECRET&code=CODE&grant_type=authorization_code
示例2
https://openapi-fxg.jinritemai.com/product/getGoodsCategory?param_json=
{"cid":"12","page":"1"}&method=product.getGoodsCategory&app_key=123456780
×tamp=2011-06-1613:23:30&v=2&sign=ab3387e5&access_token=xxxxxxxx
协议名 + 域名
https://openapi-fxg.jinritemai.com
协议名 + 域名 + 路径名
https://openapi-fxg.jinritemai.com/product/getGoodsCategory
协议名 + 域名 + 路径名 +参数
https://openapi-fxg.jinritemai.com/product/getGoodsCategory
?param_json={"cid":"12","page":"1"}
&method=product.getGoodsCategory&app_key=123456780×tamp=2011-06-16
这里可以知道是固定的!
协议名 + 域名
https://openapi-fxg.jinritemai.com
+ 路径名 +参数 ==>都是变量
参数复杂度,就有拼接,安全,顺序,业务等数据处理
参数封装==>
参数拆分
param =?method+app_key+access_token+timestamp+v+param_json+sign
1.其中 method 需要调用的方法 可以快速获取 已知
2.app_key抖店为工具型对接分配的独立app_key 已知
3.access_token序号code换取,或者refresh_token刷新 已知
4.timestamp当前时间戳 已知
5.v当前使用的API协议版本号 已知
6.param_json就是需要向抖店提交的数据 需要处理
7.sign结合param_json,timestamp,v等获取 需要处理
8.将param完整拼接起来放到
url=协议名+域名+param
9.使用驱动或者框架之类的方法调用执行URL请求
10.对请求返回的结果进行处理。
依次从1-10就完成了一个闭环的第三方抖音请求的调用!
综上我们把要处理的重要阶段拿出来.
param_json
sign
这两个的重要阶段,就是必须面对的参数处理。
param_json:有规则
sign:有规则
param_json:param_json的组装是为了sign的准备!
按sign的要求来组装原数据。
sign:有规则,按照规则来就好了!
这样来看,对于对接抖店,大体上是没什么问题了,思路框架已经确定,剩下要做的就是参数传输!
也就是建实体类,赋值绑定之类的。按照sign"k":"v"做键值绑定。格式化处理以及组装好sign后的签名加密。
实际上整个对接抖店调用就是已经完成了!
剩下都是业务需求的完善!
从上面看,其实对于sign签名的形成几乎是可以确定了签名的里面不需要转码,而其他地方是需要进行转码的!但不全都要需要转码!
也就是从
域名+路径名 不需要转码
那么参数呢?
param =?method+app_key+access_token+timestamp+v+param_json+sign
下面的参数就是需要转码的,小伙伴们就要注意了。
method+app_key+access_token+timestamp+v+param_json
大家可以把method+app_key+access_token+timestamp+v+param_json都放在下面的代码进行转码
try {
method=URLEncoder.encode(method, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是要注意这个需要做异常处理。
使用这个中文转码之后呢,就代码就不会再报400错误了。