演示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的消息代理节 ...
随机推荐
- Hashtable Dictionary List 谁效率更高
一 前言 很少接触HashTable晚上回来简单看了看,然后做一些增加和移除的操作,就想和List 与 Dictionary比较下存数据与取数据的差距,然后便有了如下的一此测试, 当然我测的方法可能不 ...
- DirectX11 SDK 例程报错解决方法
下载好DirectX11例程后,VS2015运行不起来,好几个报错 在这里记录一下,虽然挺简单的,但是我想对于像我这样的新手小伙伴们来说还是挺有用的 第一个错误: FXC : error X3501: ...
- (二十三)原型模式详解(clone方法源码的简单剖析)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 原型模式算是JAVA中最简单 ...
- Code Review 五问五答
Code Review 是什么? Code Review即代码审查,程序猿相互审核对方的代码. Code Review能获得什么好处? 提高代码可维护性 你写的代码不再只有编译器看了,你得写出审核人能 ...
- Python3.5 + django1.8.5 安装”import pymysql pymysql.install_as_MySQLdb()”的解决方法
最近在学习Python,打算先看两个在线教程,再在github上找几个开源的项目练习一下,在学到"被解放的姜戈"时遇到django同步数据库时无法执行的错误,记录一下. 错误现象: ...
- 如何实现侧边栏菜单之间的分割线——不用border-bottom
相信大家都遇到过这样一个老生常谈的问题,就是如果当我们所要做的菜单是侧边栏,垂直方向自上而下的排列的菜单栏,我们在做的时候通常的构想是这样的,就是在每两个菜单之间添加分割线,通常的想法就是说给每个菜单 ...
- RHEL7搭建DHCP
此实验利用VMware12搭建的环境,网卡都是-自定义VMnet3 网络环境: 一台server(DHCP),两台client 其中一台当做打印机使用,固定IP(根据MAC地址) 需求描述: 1:DH ...
- 查询和修改(Queries and Mutations)
On this page, you'll learn in detail about how to query a GraphQL server. 在这个页面,你将会学习更多的关于如何查询GraphQ ...
- 页面切换语言包使用session不用cookie
cookie的问题,ifame中的cookie不一致 在父页面设置的语言包cookie,在iframe中获取不到.为什么呢? 为什么语言包这个事跟cookie过不去,有什么特殊的? iframe的sr ...
- android开发------响应用户事件
今天的内容有点简单,不难,就是为按钮添加onClick事件. 新知识点: Intent类的简单使用 startActivity方法 一般事件都由按钮触发,现在我们要实现的是当用户点击按钮的时候,启动 ...