900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > HttpClient发送get post请求和数据解析

HttpClient发送get post请求和数据解析

时间:2019-08-17 13:29:04

相关推荐

HttpClient发送get post请求和数据解析

最近在跟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")@ResponseBodypublic String getWeChatUserInfo(String token,String openid){String urlNameString = "https://api./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 blocke.printStackTrace();}return result;//....result是用户信息,站内业务以及具体的json转换这里也不写了...}

其中result打印出来是:

{openid: "oIy1SuJhhc6Fk6z*****ecjrzySY",nickname: "小丑",sex: 1,language: "zh_CN",city: "海淀",province: "北京",country: "中国",headimgurl: "/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 .URL;import .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;} }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。