HttpClient发送get post请求和数据解析
来源:互联网 发布:react.js 教程 pdf 编辑:程序博客网 时间:2024/05/29 14:58
最近在跟app对接的时候有个业务是微信登录,在这里记录的不是如何一步步操作第三方的,因为是跟app对接,所以一部分代码不是由我写,
我只负责处理数据,但是整个微信第三方的流程大致都差不多,app端说要传给我access_token和openid,对用户的处理还是要我去请求微信.
这里写一下发送请求以及解析数据的过程来获取用户资料,其他的微信业务再做深究
import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils; @RequestMapping("getWeChatUserInfo") @ResponseBody public String getWeChatUserInfo(String token,String openid){ String urlNameString = "https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID"; urlNameString=urlNameString.replace("TOKEN", token); urlNameString=urlNameString.replace("OPENID",openid); String result=""; try { // 根据地址获取请求 HttpGet request = new HttpGet(urlNameString);//这里发送get请求 // 获取当前客户端对象 HttpClient httpClient = new DefaultHttpClient(); // 通过请求对象获取响应对象 HttpResponse response = httpClient.execute(request); // 判断网络连接状态码是否正常(0--200都数正常) if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { result= EntityUtils.toString(response.getEntity(),"utf-8"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return result; //....result是用户信息,站内业务以及具体的json转换这里也不写了... }
其中result打印出来是:
{openid: "oIy1SuJhhc6Fk6z*****ecjrzySY",nickname: "小丑",sex: 1,language: "zh_CN",city: "海淀",province: "北京",country: "中国",headimgurl: "http://wx.qlogo.cn/mmopen/WtXTficAHyjWBgHZX2Yf*****LK2CV9yLeiaHxKK8dhZshQgYeJEamaibT0UHQLicCfeBh698pJLc30Hrr6COHBqAKIj2rVQn3qKZ/0",privilege: [ ],unionid: "oK8SLt5GNKgJwPlL0JEST93***TQ"}
-----------------------------------------------------------
延伸:
Apache也有一个发送post请求的方法:
String url="http://XXX..";//POST的URLHttpPost httppost=new HttpPost(url);//建立HttpPost对象List<NameValuePair> params=new ArrayList<NameValuePair>();//建立一个NameValuePair数组,用于存储欲传送的参数params.add(new BasicNameValuePair("pwd","2544"));//添加参数httppost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));//设置编码HttpResponse response=new DefaultHttpClient().execute(httppost);//发送Post,并返回一个HttpResponse对象if(response.getStatusLine().getStatusCode()==200){//如果状态码为200,就是正常返回String result=EntityUtils.toString(response.getEntity());
以上的Apache Client的get post方法发送请求在java中其实已经有内置了,只不过代码稍复杂了一些
比如发送get请求
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.URL;import java.net.URLConnection;import java.util.List;import java.util.Map;public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream(),"utf-8"));//防止乱码 String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; }
发送post请求
/** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream(),"utf-8")); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } }
阅读全文
0 0
- HttpClient发送get post请求和数据解析
- HttpClient发送get和post请求
- 利用HttpClient发送Get和Post请求
- 利用HttpClient发送Get和Post请求
- 利用HttpClient发送Get和Post请求
- 利用HttpClient发送Get和Post请求
- HttpClient发送Get和Post请求
- 使用HttpClient发送GET和POST请求
- httpurlconnection 和 httpclient 发送get、post请求
- HttpClient发送post请求,和发送get请求
- HttpClient的get和post请求数据
- 使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据) (3)
- Java使用HttpClient发送Get请求和Post请求
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
- java发送post和get请求(1)---HttpClient 方式
- HttpClient 发送post和get请求 调用第三方webservice
- css 省略号代码
- 教你实现GPUImage【OpenGL渲染原理】
- UVA
- iOS通过SocketRocket实现websocket的即时聊天
- Python: PS 滤镜--高反差保留 (High pass)
- HttpClient发送get post请求和数据解析
- memcached存储大数据的问题
- Java线程同步使用
- Ajax/Json数据的遍历
- 简单易用的标签列表界面(宝宝用了都不哭了 )
- 盘点国内外几款免费好用的远程桌面工具
- Linux——CRC校验运算的介绍
- ubuntu关机指令
- Android网络编程OkHttp3用法全解析