今天项目组小弟居然问我怎么用java访问特定的地址获取数据和发送请求

Http请求都是通过输入输出流来进行操作的,首先要制定GET或者POST,默认是GET,在安全和数据量较大情况下请使用post

根据url建立链接,读取输入输出流,从中取得相应的返回数据,

http是无序的,在安全性极高的地方请使用https,但是https传输效率差不多只是http的1/10,所以除非特别必要,请谨慎选择

我将我以前写的微信开发代码贴一部分出来,这里就有根据地址获取请求数据和向某一个特定端口发送数据

package com.xiao.weixin.service.impl;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map; import javax.annotation.Resource; import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import com.xiao.weixin.common.jdbc.DataSource;
import com.xiao.weixin.dao.WeixinApiMapper;
import com.xiao.weixin.entity.AccessToken;
import com.xiao.weixin.service.WeixinApiService;
import com.xiao.weixin.utils.ApiUrl;
import com.xiao.weixin.utils.CommonUtil;
import com.xiao.weixin.utils.DateUtil; @Service(value = "weixinApiService")
public class WeixinApiServiceImpl implements WeixinApiService { private Logger log = LoggerFactory.getLogger(WeixinApiServiceImpl.class); @Value("${weixin.appID}")
private String appID; @Value("${weixin.appsecret}")
private String appsecret; @Value("${weixin.menu}")
private String menuString; @Value("${weixin.token}")
private String weixinToken; @Resource
private WeixinApiMapper weixinApiMapper; @Override
@DataSource
public String getAccessToken() {
String access_token = null;
try {
AccessToken token = weixinApiMapper.findToken();// 数据库查找没过期的token并返回
if (token != null) {
access_token = token.getAccessToken();
}
} catch (Exception e) {
log.error("获取accessToken出错");
e.printStackTrace();
}
log.debug("获取到的accessToken是:" + access_token);
return access_token;
} @Override
public void refreshAccessToken() {
log.debug("重新生成accessToken开始");
try {
String url = ApiUrl.GET_ACCESSTOKEN.replace("APPID", appID)
.replace("APPSECRET", appsecret);
log.debug("重新获取token的请求地址为:" + url);
URL urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet
.openConnection(); http.setRequestMethod("GET");
http.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); http.connect(); InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
System.out.println("message:" + message);
JSONObject json = new JSONObject(message);
String access_token = json.getString("access_token");
Integer expiresIn = json.getInt("expires_in");
log.debug("重新生成accessToken结束 成功"); // 根据取得的accessToken 来获取jsapi_ticket
String ticketUrl = ApiUrl.GET_JSAPITICKET.replace("ACCESSTOKEN",
access_token);
log.debug("重新获取jsapi_ticket的请求地址为:" + ticketUrl);
URL ticketUrlGet = new URL(ticketUrl);
HttpURLConnection tickeHttp = (HttpURLConnection) ticketUrlGet
.openConnection(); tickeHttp.setRequestMethod("GET");
tickeHttp.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
tickeHttp.setDoOutput(true);
tickeHttp.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); tickeHttp.connect(); InputStream tickeIs = tickeHttp.getInputStream();
byte[] tickeJsonBytes = new byte[tickeIs.available()];
tickeIs.read(tickeJsonBytes);
String tickeMessage = new String(tickeJsonBytes, "UTF-8");
System.out.println("message:" + message);
JSONObject ticketJson = new JSONObject(tickeMessage);
String ticket = ticketJson.getString("ticket"); AccessToken accessToken = new AccessToken();
accessToken.setAppId(appID);
accessToken.setSecret(appsecret);
accessToken.setAccessToken(access_token);
accessToken.setJsApiTicket(ticket);
accessToken.setExpireTime(DateUtil.getExpiresTime(expiresIn));
accessToken.setCreateTime(new Date());
weixinApiMapper.insertToken(accessToken);// 将新生成的token保存到数据库
} catch (Exception e) {
log.error("获取accessToken出错");
e.printStackTrace();
}
} @Override
public String createMenu() {
String access_token = getAccessToken();
String url = ApiUrl.CREATE_MENU.replace("ACCESSTOKEN", access_token);
log.debug("创建菜单的请求地址为:" + url);
try {
log.debug("menuString:" + menuString);
URL urlPost = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlPost
.openConnection();
http.setRequestMethod("POST");
http.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); http.connect();
OutputStream os = http.getOutputStream();
os.write(menuString.getBytes("UTF-8"));
os.flush();
os.close(); InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[size];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
return message;
} catch (MalformedURLException e) {
e.printStackTrace();
return "-1";
} catch (IOException e) {
e.printStackTrace();
return "-1";
}
} @Override
public Map<String, String> getSignature(String url) {
Map<String, String> map = new HashMap<String, String>();
try {
String jsapi_ticket = getJsApiTicket();
String nonceStr = "Wm3WZYTPz0wzccnW";
long timestamp = System.currentTimeMillis() / 1000; map.put("appId", appID);
map.put("timestamp", timestamp + "");
map.put("nonceStr", nonceStr); String[] paramArr = new String[] { "jsapi_ticket=" + jsapi_ticket,
"timestamp=" + timestamp, "noncestr=" + nonceStr,
"url=" + url };
Arrays.sort(paramArr);
String content = paramArr[0].concat("&" + paramArr[1])
.concat("&" + paramArr[2]).concat("&" + paramArr[3]);
log.debug("拼接之后的content为:" + content);
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] digest = md.digest(content.toString().getBytes());
String gensignature = CommonUtil.byteToStr(digest);
map.put("signature", gensignature);
return map;
} catch (Exception e) {
e.printStackTrace();
log.error("获取JSAPI签名信息失败,错误信息:" + e);
return null;
}
} @Override
public String getJsApiTicket() {
String jsApiTicket = null;
try {
AccessToken token = weixinApiMapper.findToken();// 数据库查找没过期的token并返回
if (token != null) {
jsApiTicket = token.getJsApiTicket();
}
} catch (Exception e) {
log.error("获取jsApiTicket出错");
e.printStackTrace();
}
log.debug("获取到的jsApiTicket是:" + jsApiTicket);
return jsApiTicket;
} }

【原生态】Http请求数据 与 发送数据的更多相关文章

  1. python实用脚本-定时导出数据库中的数据并且发送数据到邮箱

    1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...

  2. 一文搞懂 Netty 发送数据全流程 | 你想知道的细节全在这里

    欢迎关注公众号:bin的技术小屋,如果大家在看文章的时候发现图片加载不了,可以到公众号查看原文 本系列Netty源码解析文章基于 4.1.56.Final版本 在<Netty如何高效接收网络数据 ...

  3. HTTP 请求方式: GET和POST的比较当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

    什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议. HTTP在客户端和服务器之间以request ...

  4. Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. Query通过Ajax向PHP服务端发送请求并返回JSON数据

    Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...

  6. (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

    文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 一.GET和POST的对比: 在漫长的时间当中,其他的方法逐渐的退出了历史舞台,最常用的只剩下GE ...

  7. Android使用HttpUrlConnection请求服务器发送数据详解

    HttpUrlConnection是java内置的api,在java.net包下,那么,它请求网络同样也有get请求和post请求两种方式.最常用的Http请求无非是get和post,get请求可以获 ...

  8. Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)

    讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=te ...

  9. 安卓中使用OkHttp发送数据请求的两种方式(同、异步的GET、POST) 示例-- Android基础

    1.首先看一下最终效果的截图,看看是不是你想要的,这个年代大家都很忙,开门见山很重要! 简要说下,点击不同按钮可以实现通过不同的方式发送OkHttp请求,并返回数据,这里请求的是网页,所以返回的都是些 ...

随机推荐

  1. spring静态代理

    一.代理概念 为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代.代理类负责请求的预处理.过滤.将请求分派给委托类 ...

  2. 第一天---HTML基础学习

    HTML(hyper text markup language) HTML不是一种编程语言,而是一种标记语言(markup language),标记语言是一套markup tag(标记标签),HTML ...

  3. CICS的几个常用命令

    下面是CICS的几个常用命令,仅仅几个我也是刚刚使用CICS,慢慢积累. 1. cicscli /l 是查看启动的客户机守护程序,如果没有启动客户机守护程序,会提示如下信息:CCL8001I CICS ...

  4. 【转】关于FLASH中图文混排聊天框的小结

    原文链接 图文混排也是FLASH里一个很古老的话题了,我们不像美国佬那样游戏里面聊天框就是聊天框,全是文字干干净净,也不像日本人发明了并且频繁地使用颜文字.不管是做论坛.做游戏,必定要实现的一点就是带 ...

  5. CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境

    安装篇: 一.安装Apache yum install httpd #根据提示,输入Y安装即可成功安装 /etc/init.d/httpd start#启动Apache 备注:Apache启动之后会提 ...

  6. 串口实现FIFO接受数据

    基本原理:静态队列 /* * 串口的FIFO简单读取实现 * 功能,实现串口的FIFO实现 * 使用方法: * 版本:v1.0.0 * */ #include "sys.h" #i ...

  7. ant的安装及项目的发布

    1.安装ant1) 直接解压apache-ant-1.9.7-bin 2) 在环境变量中配置,ant_home的环境变量在 3) 在命令提示符中测试是否安装成功. 2 项目首次打包1) 写好打包的配置 ...

  8. Wine——在Linux上运行Windows软件

    官网:https://www.winehq.org/ 参考: wikipedia 教你使用Wine在Linux上运行Windows软件 如何安装和使用Wine,以便在Linux上运行Windows应用 ...

  9. poj3122-Pie(二分法+贪心思想)

    一,题意: 有f+1个人(包括自己),n块披萨pie,给你每块pie的半径,要你公平的把尽可能多的pie分给每一个人 而且每个人得到的pie来自一个pie,不能拼凑,多余的边角丢掉.二,思路: 1,输 ...

  10. 【转】Apache 配置虚拟主机三种方式

    Apache 配置虚拟主机三种方式  原文博客http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html 一.基于IP 1. 假 ...