一、Java访问远程url接口并获取结果

1、原生JavaAPI获取

package com.util;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map; /**
* <pre>
* 功能:httpUrlConnection访问远程接口工具
* 日期:2015年3月17日 上午11:19:21
* </pre>
*/
public class HttpUrlConnectionUtil { /**
* <pre>
* 方法体说明:向远程接口发起请求,返回字符串类型结果
* @param url 接口地址
* @param requestMethod 请求方式
* @param params 传递参数 重点:参数值需要用Base64进行转码
* @return String 返回结果
* </pre>
*/
public static String httpRequestToString(String url, String requestMethod,
Map<String, String> params){ String result = null;
try {
InputStream is = httpRequestToStream(url, requestMethod, params);
byte[] b = new byte[is.available()];
is.read(b);
result = new String(b);
} catch (IOException e) {
e.printStackTrace();
}
return result;
} /**
* <pre>
* 方法体说明:向远程接口发起请求,返回字节流类型结果
* 作者:itar
* 日期:2015年3月17日 上午11:20:25
* @param url 接口地址
* @param requestMethod 请求方式
* @param params 传递参数 重点:参数值需要用Base64进行转码
* @return InputStream 返回结果
* </pre>
*/
public static InputStream httpRequestToStream(String url, String requestMethod,
Map<String, String> params){ InputStream is = null;
try {
String parameters = "";
boolean hasParams = false;
//将参数集合拼接成特定格式,如name=zhangsan&age=24
for(String key : params.keySet()){
String value = URLEncoder.encode(params.get(key), "UTF-8");
parameters += key +"="+ value +"&";
hasParams = true;
}
if(hasParams){
parameters = parameters.substring(0, parameters.length()-1);
} //请求方式是否为get
boolean isGet = "get".equalsIgnoreCase(requestMethod);
//请求方式是否为post
boolean isPost = "post".equalsIgnoreCase(requestMethod);
if(isGet){
url += "?"+ parameters;
} URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u.openConnection(); //请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Content-Type为“”空)
conn.setRequestProperty("Content-Type", "application/octet-stream");
//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//设置连接超时时间
conn.setConnectTimeout(50000);
//设置读取返回内容超时时间
conn.setReadTimeout(50000);
//设置向HttpURLConnection对象中输出,因为post方式将请求参数放在http正文内,因此需要设置为ture,默认false
if(isPost){
conn.setDoOutput(true);
}
//设置从HttpURLConnection对象读入,默认为true
conn.setDoInput(true);
//设置是否使用缓存,post方式不能使用缓存
if(isPost){
conn.setUseCaches(false);
}
//设置请求方式,默认为GET
conn.setRequestMethod(requestMethod); //post方式需要将传递的参数输出到conn对象中
if(isPost){
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(parameters);
dos.flush();
dos.close();
} //从HttpURLConnection对象中读取响应的消息
//执行该语句时才正式发起请求
is = conn.getInputStream();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return is;
}
}

2、利用httpClient访问获取

package com.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map; import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils; /**
* <pre>
* 功能:httpClient访问远程接口工具类
* 日期:2015年3月17日 上午11:19:21
* </pre>
*/
@SuppressWarnings("deprecation")
public class HttpClientUtil { /**
* <pre>
* 方法体说明:向远程接口发起请求,返回字符串类型结果
* @param url 接口地址
* @param requestMethod 请求类型
* @param params 传递参数
* @return String 返回结果
* </pre>
*/
public static String httpRequestToString(String url, String requestMethod,
Map<String, String> params, String ...auth){
//接口返回结果
String methodResult = null;
try {
String parameters = "";
boolean hasParams = false;
//将参数集合拼接成特定格式,如name=zhangsan&age=24
for(String key : params.keySet()){
String value = URLEncoder.encode(params.get(key), "UTF-8");
parameters += key +"="+ value +"&";
hasParams = true;
}
if(hasParams){
parameters = parameters.substring(0, parameters.length()-1);
}
//是否为GET方式请求
boolean isGet = "get".equalsIgnoreCase(requestMethod);
boolean isPost = "post".equalsIgnoreCase(requestMethod);
boolean isPut = "put".equalsIgnoreCase(requestMethod);
boolean isDelete = "delete".equalsIgnoreCase(requestMethod); //创建HttpClient连接对象
DefaultHttpClient client = new DefaultHttpClient();
HttpRequestBase method = null;
if(isGet){
url += "?" + parameters;
method = new HttpGet(url);
}else if(isPost){
method = new HttpPost(url);
HttpPost postMethod = (HttpPost) method;
StringEntity entity = new StringEntity(parameters);
postMethod.setEntity(entity);
}else if(isPut){
method = new HttpPut(url);
HttpPut putMethod = (HttpPut) method;
StringEntity entity = new StringEntity(parameters);
putMethod.setEntity(entity);
}else if(isDelete){
url += "?" + parameters;
method = new HttpDelete(url);
}
method.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 6000);
//设置参数内容类型
method.addHeader("Content-Type","application/x-www-form-urlencoded");
//httpClient本地上下文
HttpClientContext context = null;
if(!(auth==null || auth.length==0)){
String username = auth[0];
String password = auth[1];
UsernamePasswordCredentials credt = new UsernamePasswordCredentials(username,password);
//凭据提供器
CredentialsProvider provider = new BasicCredentialsProvider();
//凭据的匹配范围
provider.setCredentials(AuthScope.ANY, credt);
context = HttpClientContext.create();
context.setCredentialsProvider(provider);
}
//访问接口,返回状态码
HttpResponse response = client.execute(method, context);
//返回状态码200,则访问接口成功
if(response.getStatusLine().getStatusCode()==200){
methodResult = EntityUtils.toString(response.getEntity());
}
client.close();
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
return methodResult;
}
}

Java远程访问接口的几种方式的更多相关文章

  1. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  2. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  3. Java添加事件的四种方式

    Java添加事件的几种方式(转载了codebrother的文章,做了稍微的改动) /** * Java事件监听处理——自身类实现ActionListener接口,作为事件监听器 * * @author ...

  4. java解析xml的几种方式

    java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...

  5. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  6. java 实现websocket的三种方式

    Java中实现websocket常见有以下三种方式: 使用tomcat的websocket实现,需要tomcat 7.x,JEE7的支持. 使用spring的websocket,spring与webs ...

  7. Java新建线程的两种方式

    Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...

  8. 【转】Java中创建对象的5种方式

    Java中创建对象的5种方式   作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...

  9. Java创建线程的四种方式

    Java创建线程的四种方式 1.继承Thread类创建线程 定义Thread类的子类,并重写该类的run方法,run()方法的内容就是该线程执行的内容 创建Thread子类的实例,即创建了线程对象. ...

随机推荐

  1. cocos2d-x学习记录1——图片显示

    这篇算是cocos2d-x入门篇,显示一张图片即可. 观察工程中HelloWorld的结构,包含AppDelegate和HelloWorldScene两个类文件,AppDelegate中包含基本的处理 ...

  2. libgdx学习记录23——图片移动选择

    模拟移动选择图片,采用相机实现. package com.fxb.newtest; import com.badlogic.gdx.ApplicationAdapter; import com.bad ...

  3. 本地navicat远程连接到云服务器数据库

    本来没有开启秘钥的远程服务器端数据库连接非常方便,就在新建连接上填入数据就ok了,但是开启SSH秘钥后的服务器连接有一个大坑,下面来详细讲讲. 其实开启了秘钥,在新建连接下,先选择SSH方式登录到远程 ...

  4. Html_div圆角

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. Mysql_临时表

    CREATE TEMPORARY TABLE test_info ( test_name ) NOT NULL, test_totail ,) NOT NULL DEFAULT 0.00, test_ ...

  6. 《杜增强讲Unity之Tanks坦克大战》10-相机控制

    10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内.   image 在Hierarchy点击右键   image 点击 Create Empty,生成空对象,改名 ...

  7. PHP学习 安装环境和语法学习

    要回归技术了,昨天下午专门去深圳大学城图书馆借书,甚是漂亮 禁不住搞了几张照片 在图书馆里面的书真多,图书馆环境真好,清华大学 北京大学研究生院的学生们有福了,最后一句深圳政府真尼玛有钱,下图是图书馆 ...

  8. java入门--4111:判断游戏胜者-Who Is the Winner

    基础的题目 学习了StringBuilder, 通过delete来清空它 学了Map的简单用法 import java.util.*; public class Main { public stati ...

  9. sql 更新多条记录

    转载:https://www.cnblogs.com/hfultrastrong/p/6905057.html 如果你想更新多行数据,并且每行记录的各字段值都是各不一样,你会怎么办呢?本文以一个示例向 ...

  10. beta3

    吴晓晖(组长) 过去两天完成了哪些任务 一些细节的debug,部分优化,算法中有关记录的部分 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还剩下哪些任务 组员:刘帅珍 过去两天完成 ...