今天项目组小弟居然问我怎么用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. Difference between WCF and Web API and WCF REST and Web Service

    The .Net framework has a number of technologies that allow you to create HTTP services such as Web S ...

  2. Ambari组件黄色预警

    Ambari组件黄色预警 组件上为黄色问号,代表心跳丢失,解决如下: 1.  查看个节点之间是否可以相互通信,若ssh连接不上,有可能是该节点关机了,没有打开,手动开启该节点,再次验证是否可互通. 2 ...

  3. dictionary 应用(绑定dgv)

    dictionary的用法://初始化添加所有车位进这队列 Utility.Effectlist.Add(); //每触发一次,用这个增加数量 Utility.Effectlist["Car ...

  4. 一次sql排序的问题。

    select date, count(fail) as fail,count(win) as win from (select date,(case (result) when 'fail' then ...

  5. 1002. A+B for Polynomials (25)

    题目链接:https://www.patest.cn/contests/pat-a-practise/1002 原题如下: This time, you are supposed to find A+ ...

  6. Ajax的二次封装

    function handleAjax(url,_data,method) { return ajax(url,_data,method).then(function (res) { if(res){ ...

  7. php入门一ubuntu16.04中php环境配置及一个网页

    1.PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言. 2.PHP 文件可包含文本.HTML.JavaScr ...

  8. apache配置反向代理

    http.conf 去掉前面的#号 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/ ...

  9. tomcat报错java.lang.IllegalArgumentException: Document base XXXXX does not exist or is not a readable directory

    启动tomcat的时候报如下错误: java.lang.IllegalArgumentException: Document base F:\java\tools\tomcat\me-webapps\ ...

  10. PHP好任性 —— 大小写敏感有两种规则,然而并没有什么特别原因

    大小写敏感 变量.常量大小写敏感 大小写不敏感 类名.方法名.函数名.魔法变量大小写不敏感 原因 有人原引了Rasmus 在一次会议上的发言大意: "I'm definitely not a ...