JAVA 调用HTTP接口POST或GET实现方式
来源:互联网 发布:淘宝如果设置1元换购 编辑:程序博客网 时间:2024/05/16 14:31
HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。
具体POST或GET实现代码如下:
package com.yoodb.util;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpMethodParams;public class HttpConnectUtil { private static String DUOSHUO_SHORTNAME = "yoodb";//多说短域名 ****.yoodb.**** private static String DUOSHUO_SECRET = "xxxxxxxxxxxxxxxxx";//多说秘钥 /** * get方式 * @param url * @author www.yoodb.com * @return */ public static String getHttp(String url) { String responseMsg = ""; HttpClient httpClient = new HttpClient(); GetMethod getMethod = new GetMethod(url); getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler()); try { httpClient.executeMethod(getMethod); ByteArrayOutputStream out = new ByteArrayOutputStream(); InputStream in = getMethod.getResponseBodyAsStream(); int len = 0; byte[] buf = new byte[1024]; while((len=in.read(buf))!=-1){ out.write(buf, 0, len); } responseMsg = out.toString("UTF-8"); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //释放连接 getMethod.releaseConnection(); } return responseMsg; } /** * post方式 * @param url * @param code * @param type * @author www.yoodb.com * @return */ public static String postHttp(String url,String code,String type) { String responseMsg = ""; HttpClient httpClient = new HttpClient(); httpClient.getParams().setContentCharset("GBK"); PostMethod postMethod = new PostMethod(url); postMethod.addParameter(type, code); postMethod.addParameter("client_id", DUOSHUO_SHORTNAME); postMethod.addParameter("client_secret", DUOSHUO_SECRET); try { httpClient.executeMethod(postMethod); ByteArrayOutputStream out = new ByteArrayOutputStream(); InputStream in = postMethod.getResponseBodyAsStream(); int len = 0; byte[] buf = new byte[1024]; while((len=in.read(buf))!=-1){ out.write(buf, 0, len); } responseMsg = out.toString("UTF-8"); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { postMethod.releaseConnection(); } return responseMsg; }}
1、下面说一下多说单点登录(SSO)获取access_token访问多说API的凭证。
多说单点登录(SSO),授权结束后跳转回在sso中设置的login地址,注意这时候的URL带上了code参数,通过code获取access_token访问多说API的凭证,具体实现代码如下:
public Map<String, String> getUserToken(String code){ String url = "http://api.duoshuo.com/oauth2/access_token"; String response = HttpConnectUtil.postHttp(url, code, "code"); System.out.println(response); Gson gson = new Gson(); Map<String, String> retMap = gson.fromJson(response,new TypeToken<Map<String, String>>() {}.getType()); return retMap;}
返回参数是一个JSON串,包含user_id和access_token,user_id是该用户在多说的ID,access_token是访问多说API的凭证,处理成Map集合方便使用。
2、如果获取多说的用户信息,根据上一步获得的多说用户user_id来获取用户的具体信息,详情代码如下:
public Map getProfiletMap(String userId){ String url = "http://api.duoshuo.com/users/profile.json?user_id="+userId; String response = HttpConnectUtil.getHttp(url); response = response.replaceAll("\\\\", ""); System.out.println(response); Gson gson = new Gson(); Map profile = gson.fromJson(response, Map.class); return profile;}
上述使用了Google处理json数据的jar,如果对Gson处理json数据的方式不很了解,参考地址:http://www.yoodb.com/article/display/1033
返回的数据格式如下:
{ "response": { "user_id": "13504206", "name": "伤了心", "url": "http://t.qq.com/wdg1115024292", "avatar_url": "http://q.qlogo.cn/qqapp/100229475/F007A1729D7BCC84C106D6E4F2ECC936/100", "threads": 0, "comments": 0, "social_uid": { "qq": "F007A1729D7BCC84C106D6E4F2ECC936" }, "post_votes": "0", "connected_services": { "qqt": { "name": "伤了心", "email": null, "avatar_url": "http://app.qlogo.cn/mbloghead/8a59ee1565781d099f3a/50", "url": "http://t.qq.com/wdg1115024292", "description": "没劲", "service_name": "qqt" }, "qzone": { "name": "?郁闷小佈?", "avatar_url": "http://q.qlogo.cn/qqapp/100229475/F007A1729D7BCC84C106D6E4F2ECC936/100", "service_name": "qzone" } } }, "code": 0}
获取的用户信息不方便查看,建议格式化一下,Json校验或格式化地址:http://www.yoodb.com/toJson,返回数据参数说明:
code int 一定返回
结果码。0为成功。失败时为错误码。
errorMessage strin
错误消息。当code不为0时,返回错误消息。
response object
json对象。当code为0时,返回请求到的json对象。
0 0
- JAVA 调用HTTP接口POST或GET实现方式
- JAVA 调用HTTP接口POST或GET实现方式
- get/post方式调用http接口
- get/post方式调用http接口
- get/post方式调用http接口
- get/post方式调用http接口
- get/post方式调用http接口
- get/post方式调用http接口
- get/post方式调用http接口
- get/post方式调用http接口
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求、调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- JAVA发送http get/post请求,调用http接口、方法
- 如何调用http接口获取json数据及GET/POST方式调用http接口
- 各版本Android Support包里究竟有什么
- JQuery $.each用法
- 修改java代码不用重启tomcat即生效
- Win7 系统权限不足需要管理员权限 解决方法
- AndroidStudio配置gradle,APP自动签名
- JAVA 调用HTTP接口POST或GET实现方式
- 编辑框自动滚屏到最后
- mouseenter与mouseleave
- 异常
- 有图有话 | 嘘……你屏蔽了哪个微信群?
- DroidPlugin机制原理分析
- android微信支付问题总结
- JDBC配置文件和工具类
- Android拍照调用系统相册仿微信封装总结,治疗各种崩溃,图片横竖问题压缩等问题。-更新2016-12-21