演示get、post请求如何算sn,算得sn如何使用
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.TreeMap;
- //需要httpclient-x.x.jar,httpcore-x.x.jar,commons-logging-x.x.jar,commons-httpclient-x.x.jar,commons-codec-x.x.jar包发http请求
- import org.apache.commons.httpclient.URIException;
- import org.apache.commons.httpclient.util.URIUtil;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- public class SnTest {
- public static void main(String[] args) throws Exception {
- SnTest snTest = new SnTest();
- snTest.testGet();
- snTest.testPost();
- }
- public void testGet() throws Exception {
- /**
- * 以http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak为例
- * ak设置了sn校验不能直接使用必须在url最后附上sn值,get请求计算sn跟url中参数对出现顺序有关,需按序填充paramsMap,
- * post请求是按字母序填充,具体参照testPost()
- */
- Map paramsMap = new LinkedHashMap<String, String>();
- paramsMap.put("address", "百度大厦");
- paramsMap.put("output", "json");
- paramsMap.put("ak", "yourak");
- // 调用下面的toQueryString方法,对paramsMap内所有value作utf8编码
- String paramsStr = toQueryString(paramsMap);
- // 对paramsStr前面拼接上/geocoder/v2/?,后面直接拼接yoursk
- String wholeStr = new String("/geocoder/v2/?" + paramsStr + "yoursk");
- // 对上面wholeStr再作utf8编码
- String tempStr = URLEncoder.encode(wholeStr, "UTF-8");
- // 调用下面的MD5方法得到sn签名值
- String sn = MD5(tempStr);
- // 算得sn后发送get请求
- HttpClient client = new DefaultHttpClient();
- HttpGet httpget = new HttpGet(
- "http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn="
- + sn);
- HttpResponse response = client.execute(httpget);
- InputStream is = response.getEntity().getContent();
- String result = inStream2String(is);
- // 打印响应内容
- System.out.println(result);
- }
- public void testPost() throws Exception {
- /**
- * 以http://api.map.baidu.com/geodata/v3/geotable/create创建表为例
- */
- LinkedHashMap<String, String> paramsMap = new LinkedHashMap<String, String>();
- paramsMap.put("geotype", "1");
- paramsMap.put("ak", "yourak");
- paramsMap.put("name", "geotable80");
- paramsMap.put("is_published", "1");
- // post请求是按字母序填充,对上面的paramsMap按key的字母序排列
- Map<String, String> treeMap = new TreeMap<String, String>(paramsMap);
- String paramsStr = toQueryString(treeMap);
- String wholeStr = new String("/geodata/v3/geotable/create?" + paramsStr
- + "yoursk");
- String tempStr = URLEncoder.encode(wholeStr, "UTF-8");
- // 调用下面的MD5方法得到sn签名值
- String sn = MD5(tempStr);
- HttpClient client = new DefaultHttpClient();
- HttpPost post = new HttpPost(
- "http://api.map.baidu.com/geodata/v3/geotable/create");
- List<NameValuePair> params = new ArrayList<NameValuePair>();
- params.add(new BasicNameValuePair("geotype", "1"));
- params.add(new BasicNameValuePair("ak", "yourak"));
- params.add(new BasicNameValuePair("name", "geotable80"));
- params.add(new BasicNameValuePair("is_published", "1"));
- params.add(new BasicNameValuePair("sn", sn));
- HttpEntity formEntity = new UrlEncodedFormEntity(params);
- post.setEntity(formEntity);
- HttpResponse response = client.execute(post);
- InputStream is = response.getEntity().getContent();
- String result = inStream2String(is);
- // 打印响应内容
- System.out.println(result);
- }
- // 对Map内所有value作utf8编码,拼接返回结果
- public String toQueryString(Map<?, ?> data)
- throws UnsupportedEncodingException, URIException {
- StringBuffer queryString = new StringBuffer();
- for (Entry<?, ?> pair : data.entrySet()) {
- queryString.append(pair.getKey() + "=");
- // queryString.append(URLEncoder.encode((String) pair.getValue(),
- // "UTF-8") + "&");
- queryString.append(URIUtil.encodeQuery((String) pair.getValue(),
- "UTF-8") + "&");
- }
- if (queryString.length() > 0) {
- queryString.deleteCharAt(queryString.length() - 1);
- }
- return queryString.toString();
- }
- // MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制
- public String MD5(String md5) {
- try {
- java.security.MessageDigest md = java.security.MessageDigest
- .getInstance("MD5");
- byte[] array = md.digest(md5.getBytes());
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < array.length; ++i) {
- sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100)
- .substring(1, 3));
- }
- return sb.toString();
- } catch (java.security.NoSuchAlgorithmException e) {
- }
- return null;
- }
- // 将输入流转换成字符串
- private static String inStream2String(InputStream is) throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buf = new byte[1024];
- int len = -1;
- while ((len = is.read(buf)) != -1) {
- baos.write(buf, 0, len);
- }
- return new String(baos.toByteArray(), "UTF-8");
- }
- }
演示get、post请求如何算sn,算得sn如何使用的更多相关文章
- 关于java后台接入百度地图返回参数为{"status":211,"message":"APP SN校验失败"}的解决方法
1.关于百度地图,天气预报,微信公众平台等一系列权威机构java接入的认识: a.首先要认识到的是这些信息都属于外部接口,我们在进行接入的时候一定要注意到这些接口的参数设置,稍微一不留神就会出现接入失 ...
- Nginx请求连接限制
目录 Nginx的请求限制 HTTP协议的连接与请求 连接限制 配置示例 做个演示: 请求限制 配置示例 基本指令 limit_req_zone limit_req zone 做个演示: Nginx的 ...
- ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实现了IServer接口的所有类型以及对应对象的统称,如下面 ...
- 3G数据请求
// 该类负责发送2G/3G Http请求的数据 #import <Foundation/Foundation.h> #import "ASIHTTPRequest.h&quo ...
- GET/POST请求的使用《极客学院 --AFNetworking 2.x 网络解析详解--2》学习笔记
AFNetworking是开源代码排名第一的开源库. GET请求的请求正文 一般都是明文显示的,携带的数据量小. POST用于处理复杂的业务,并不用明文的请求,其实POST请求可以携带更多的参数,只 ...
- Server是如何完成针对请求的监听、接收与响应1
Server是如何完成针对请求的监听.接收与响应的[上] Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实 ...
- jQuery Ajax封装(附带加载提示和请求结果提示模版)
1.创建HTML文件(demo) <!doctype html> <html lang="en"> <head> <meta charse ...
- 开源个.NetCore写的 - 并发请求工具PressureTool
本篇和大家分享的是一个 并发请求工具,并发往往代表的就是压力,对于一些订单量比较多的公司这种情况很普遍,也因此出现了很多应对并发的解决方案如:分布式,队列,数据库锁等: 对于没有遇到过或者不可能线上来 ...
- Kafka技术内幕 读书笔记之(六) 存储层——服务端处理读写请求、分区与副本
如下图中分区到 日 志的虚线表示 : 业务逻辑层的一个分区对应物理存储层的一个日志 . 消息集到数据文件的虚线表示 : 客户端发送的消息集最终会写入日志分段对应的数据文件,存储到Kafka的消息代理节 ...
随机推荐
- BatsingJSLib 2.3、Ajax上传多个文件
//2.3Ajax上传单个或多个文件 //<input type="file" multiple="multiple"/> //参数:文件的表单JD ...
- ASP.NET 小白从零开始建站简易教程 (一)域名、虚拟主机、FTP上传文件
只考虑性价比,纯新手实验无备案.跟着步骤走半小时即可收获独立的个人网站一枚! 我的实验站 http://www.bearlab.site/ ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 目前总价花费86元(域名加虚 ...
- BASH 命令以及使用方法小结
最近工作中需要写一个Linux脚本,用到了很多BASH命令,为了防止以后忘记,在这里把它们一一记下来.可能会比较乱,随便看看就好了.如果有说的不对的地方也欢迎大家指正. 1,export VAR=.. ...
- 论javascript中的原始值和对象
javascript将数据类型分为两类:原始值(undefined.null.布尔值.数字和字符串),对象(对象.函数和数组) 论点:原始值不可以改变,对象可以改变:对象为引用类型: '原始值不可以改 ...
- 学习SQLite之路(四)
20160621 更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite alter命令:不通过执行一个完整的转储和数 ...
- 也来山寨一版Flappy Bird (js版)
随着Flappy Bird的火爆,各种实现的版也不断出现,于是也手痒简单实现了一版. 其实本来只是想实现一下这只笨鸟的飞翔运动的,后来没忍住,就直接实现一个完整游戏了…… 因为这个游戏本身实现起来就没 ...
- [BZOJ1579][Usaco2009 Feb]Revamping Trails 道路升级(二维最短路问题)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1579 分析: 设d[i][j]表示从1走到i.改了j条边的最短路径长度 如果设i相连的 ...
- [AJAX系列]$.post(url,[data],[fn],[type])
概述: 通过远程HTTP POST请求载入信息 参数: url:发送请求地址 data:待发送Key/value值 callback:发送成功时回调函数 type:返回内容格式 xml html ...
- quartz介绍
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度.本 ...
- spring第一课,beans配置(上)
1.通过property配置bean <!-- 配置一个 bean --> <bean id="helloWorld" class="com.atgui ...