演示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的消息代理节 ...
随机推荐
- WPF循环加载图片导致内存溢出的解决办法
程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成“动画”. 生成BitmapImage的方法有多种: 1. var source=new BitmapImage(new Uri(" ...
- Javascript的精华啊【如果以后我看到了或者想到了再继续补吧】
我不过略有一些讨人喜欢的地方而已,怎么会有什么迷人的魔力呢? 一.语法 JS只有一个数字类型,64位浮点数,所以1和1.0是相同的.为什么这么设计:防止短整型的溢出. 二.对象 1.通常将一个对象的值 ...
- 初用protobuf-csharp-port
下面这个用法是参照protobuf-csharp-port的官方wiki,参见: https://code.google.com/p/protobuf-csharp-port/wiki/Getting ...
- SQL复杂查询和视图(2)
分组查询 SQL可以将检索到的元组按某一条件进行分组,分组是属性值相同的为一组 求每个学生的平均成绩 SELECT sn,AVG(score)FROM scGROUP BY sn 先按sn进行分组,即 ...
- HIbernate的对象状态
*临时状态对象: session中没有缓存,且在数据库中没有对应数据. User user1=new User(null,"c50",18); *持久化状态对象: session中 ...
- chrome编辑DOM
来源于:https://developers.google.com/web/tools/chrome-devtools/inspect-styles/edit-dom The DOM tree vie ...
- freemarker 分页取值
<#if pagination??&&pagination.list??> <#list pagination.list as video> <td al ...
- .NET中的垃圾回收
目录 l 导言 l 关于垃圾回收 l 垃圾回收算法 m 应用程序根(Application Roots) l 实现 m ...
- 关于php插件pdo_mysql的安装
今天在做一个商城的连接的时候,需要MpDO验证.需要安装pdo_mysql模块,刚开始按照php扩展模块的安装按照这个安装ZIP,curl都成功了但是安装pdo_mysql却不行,在./configu ...
- Tomcat-在发布项目时两次重复加载的问题介绍与解决
前提: 如 1.存在某个应用:hello 2.该应用存放路径:D:\apache-tomcat-5.5.17\webapps\hello 3.Tomcat的server.xml部分配置信息如下: ...