最近调用一个第三方接口,生成签名的时候要使用到PHP中的http_build_query()方法,它的原话是这样写的
http_build_query数组形成GET形式的字符串 。
这个签名是在http_build_query()这个方法执行完成后,附加了另外一个提供的字符串,之后进行MD5加密取得32位的值,在网上查找各种方法之后生成出来的签名都是错的。
于是开始仔细研究http_build_query()这个方法,具体的过程大概是这样的:
1、构造需要通过http_build_query()处理的带有特殊字符的字符串
2、在PHP中调用http_build_query()方法处理该字符串
3、将得到的字符串与原来的字符串进行比较,然后自己构造同样的字符传
自己构造的过程就不赘述的,下面是实现方法:
/**
* Java实现PHP中的http_build_query()效果
* @param array
* key=value形式的二位数组
* @return
*/
public String http_build_query(Map<String ,String> array){
String reString = null;
//遍历数组形成akey=avalue&bkey=bvalue&ckey=cvalue形式的的字符串
Iterator it = array.entrySet().iterator();
while (it.hasNext()){
Map.Entry<String,String> entry =(Map.Entry) it.next();
String key = entry.getKey();
String value = entry.getValue();
reString += key+"="+value+"&";
}
reString = reString.substring(0, reString.length()-1);
//将得到的字符串进行处理得到目标格式的字符串
reString = java.net.URLEncoder.encode(reString);
reString = reString.replace("%3D", "=").replace("%26", "&");
return reString;
}
但是,马上问题来了,如果参数数组中有汉字的话java.net.URLEncoder.encode(String string)之后的串在两个不同的类中处理出
来的字符串竟然神奇的不一样,不一样,同样的字符串,在不同类的相同方法中处理过后竟然不一样,又开始一阵纠结,最后因为java.net.URLEncoder.encode(String string)已经被划线了,就想是不是这个问题,替换成现在推荐的方法java.net.URLEncoder.encode(String string ,String enc),ok,问题解决。附上最后的处理方法
/**
* Java实现PHP中的http_build_query()效果
* @param array
* key=value形式的二位数组
* @return
*/
public String http_build_query(Map<String ,String> array){
String reString = null;
//遍历数组形成akey=avalue&bkey=bvalue&ckey=cvalue形式的的字符串
Iterator it = array.entrySet().iterator();
while (it.hasNext()){
Map.Entry<String,String> entry =(Map.Entry) it.next();
String key = entry.getKey();
String value = entry.getValue();
reString += key+"="+value+"&";
}
reString = reString.substring(0, reString.length()-1);
//将得到的字符串进行处理得到目标格式的字符串
try {
reString = java.net.URLEncoder.encode(reString,"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
reString = reString.replace("%3D", "=").replace("%26", "&");
return reString;
}
ok,总结完毕
...暴露了我的小学作文水平
分享到:
相关推荐
从对象(JavaScript中php的http_build_query())生成URL编码的查询字符串。 安装: $ npm install http-build-query 用法: var httpBuildQuery = require ( 'http-build-query' ) ; // Simple using var obj = ...
本文实例讲述了PHP使用http_build_query()构造URL字符串的方法。分享给大家供大家参考,具体如下: 简单来说,http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理。 ...
在PHP编程中,`http_build_query` 是一个非常实用的函数,它用于将关联数组或者对象转换成HTTP查询字符串格式。这个函数对于处理POST请求的数据,尤其是与CURL库配合时,尤为关键。在给定的标题和描述中,提到了在...
`http_build_query`是PHP内置的一个函数,用于将数组或者对象转换成URL编码的字符串,常用于构建HTTP请求的查询字符串。这个函数的核心作用在于它能够处理不同类型的数组,包括一维、多维以及对象,并将它们转换为...
`http_build_query()`是PHP中一个非常实用的函数,它用于将数组转换为URL编码的字符串,这在构建HTTP请求,特别是GET请求时非常有用。这个函数能够处理各种类型的数组结构,包括一维、多维以及混合索引和关联数组。 ...
http_build_url, 为 http_build_url() 提供无需pecl_http的项目功能 用于PHP的 http_build_url() 这个简单的库为 http_build_url() 插件提供了在没有的环境下的功能。 它的目的是模仿in函数的功能,并带有一套针对...
PHP后备函数http_build_url() 对于没有安装 pecl_http 包的服务器。 见 基于 pecl_http-1.7.6 的原始 C 代码 使用了 Sébastien Corne 的一些片段。 版本:1.7.6 作者:Ivan Tcholakov ,2014 许可证:MIT...
Mobile_Token_3.0_KJava_Beta1_Build0044.jar
总的来说,"edem_coupling_build_fluentEDEM_EDEMFluent耦合UDF_EDEM_"是一个关于如何利用UDF将EDEM的颗粒模拟功能与FLUENT的流体模拟相结合的资源包,为研究和解决涉及颗粒与流体相互作用的复杂问题提供了强大的...
南大通用Gbase数据库jdbc连接驱动gbase-connector-java-8.3.81.51_build50.0-bin.jar
Packet Tracer作为其教育工具,能帮助用户在不实际操作硬件的情况下,模拟各种网络场景,理解网络设备如何协同工作,以及如何配置这些设备以实现特定的网络功能。 压缩包内的唯一文件 "CiscoPacketTracer800_Build...
标题“DDPM_edem_coupling_build_EDEM2021_Fluent2021.zip”和描述“DDPM_edem_coupling_build_EDEM2021_Fluent2021”涉及的关键技术是DDPM(Dusty Dusty Particle Method,尘埃颗粒方法)、EDEM(Eulerian-Dual ...
visual studio 2017 build tools,可代替vc++ 2015 buildtools,即替代visualcppbuildtools_full
QQ2010_Java_Build0154_Unsign
构建_定制_ FPGA _实现_私有化_ RapidWright_Build_Customized_FPGA_Implementations_for_Vivado_RapidWright
在Java中,我们可以使用多种库来实现HTTP文件上传,例如Apache HttpClient或Java内置的HttpURLConnection。Apache HttpClient是一个强大的HTTP客户端库,提供了丰富的功能和更好的性能。而HttpURLConnection是Java...
"edem_coupling_build_EDEM2.7-2018+Fluent17.0-19.1.rar"这个压缩包提供了EDEM 2.6至2018版本与Fluent 17.0至19.1版本之间的耦合接口,以及相关的使用教程,旨在帮助用户进行高效的数据交互和模拟分析。 首先,...