eoLinker-API_Shop_植物大全_API接口_Java调用示例代码

eoLinker-API_Shop_植物大全_API接口_Java调用示例代码
eoLinker-API_Shop_植物大全_API接口_Java调用示例代码

eoLinker-API Shop 植物大全 Java调用示例代码

植物大全

可查询相关植物信息,包含观花植物、观叶植物、多肉植物与流行植物,可按种类、花期与颜色分类,带植物图片。

该产品拥有以下APIs:

1.关键字获取植物

2.获取植物列表

3.获取植物信息

注意,该示例代码仅适用于https://www.360docs.net/doc/fe8098556.html,网站下API使用该产品前,您需要

通过https://https://www.360docs.net/doc/fe8098556.html,/#/api/detail/?productID=199申请API服务

1.关键字获取植物

package net.apishop.www.controller;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection;

import https://www.360docs.net/doc/fe8098556.html,.MalformedURLException;

import https://www.360docs.net/doc/fe8098556.html,.URL;

import https://www.360docs.net/doc/fe8098556.html,.URLEncoder;

import java.util.HashMap;

import java.util.Map;

import com.alibaba.fastjson.JSONObject;

/**

* httpUrlConnection访问远程接口工具

*/

public class Api

{

/**

* 方法体说明:向远程接口发起请求,返回字节流类型结果

* param url 接口地址

* param requestMethod 请求方式

* param params 传递参数重点:参数值需要用Base64进行转码

* return InputStream 返回结果

*/

public static InputStream httpRequestToStream(String url, String re

questMethod, Map 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.openConnecti on();

// 请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Con tent-Type为“”空)

conn.setRequestProperty("Content-Type", "application/octet-stream");

// conn.setRequestProperty("Content-Type", "application/x-w ww-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.getOut putStream());

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;

}

public static void main(String args[])

{

String url = "https://https://www.360docs.net/doc/fe8098556.html,/common/postcode/getPostCo deByAddr";

String requestMethod = "POST";

Map params = new HashMap(); params.put("apiKey","your_api_key"); //需要从https://www.360docs.net/doc/fe8098556.html,获取

params.put("page", ""); //页码(默认为1)

params.put("pageSize", ""); //当前页面植物数量(默认为30)

params.put("keyword", ""); //关键字

String result = null;

try

{

InputStream is = httpRequestToStream(url, requestMethod, pa rams);

byte[] b = new byte[is.available()];

is.read(b);

result = new String(b);

}

catch(IOException e)

{

e.printStackTrace();

}

if (result != null)

{

JSONObject jsonObject = JSONObject.parseObject(result);

String status_code = jsonObject.getString("statusCode");

if (status_code == "000000")

{

// 状态码为000000, 说明请求成功

System.out.println("请求成功:" + jsonObject.getString("resu lt"));

}

else

{

// 状态码非000000, 说明请求失败

System.out.println("请求失败:" + jsonObject.getString("desc "));

}

}

else

{

// 返回内容异常,发送请求失败,以下可根据业务逻辑自行修改

System.out.println("发送请求失败");

}

}

}

2.获取植物列表

package net.apishop.www.controller;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection;

import https://www.360docs.net/doc/fe8098556.html,.MalformedURLException;

import https://www.360docs.net/doc/fe8098556.html,.URL;

import https://www.360docs.net/doc/fe8098556.html,.URLEncoder;

import java.util.HashMap;

import java.util.Map;

import com.alibaba.fastjson.JSONObject;

/**

* httpUrlConnection访问远程接口工具

*/

public class Api

{

/**

* 方法体说明:向远程接口发起请求,返回字节流类型结果

* param url 接口地址

* param requestMethod 请求方式

* param params 传递参数重点:参数值需要用Base64进行转码

* return InputStream 返回结果

*/

public static InputStream httpRequestToStream(String url, String re questMethod, Map 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.openConnecti on();

// 请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Con tent-Type为“”空)

conn.setRequestProperty("Content-Type", "application/octet-stream");

// conn.setRequestProperty("Content-Type", "application/x-w ww-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.getOut putStream());

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;

}

public static void main(String args[])

{

String url = "https://https://www.360docs.net/doc/fe8098556.html,/common/postcode/getPostCo deByAddr";

String requestMethod = "POST";

Map params = new HashMap(); params.put("apiKey","your_api_key"); //需要从https://www.360docs.net/doc/fe8098556.html,获

params.put("page", ""); //页码(默认为1)

params.put("pageSize", ""); //当前页面植物数量(默认为30)

String result = null;

try

{

InputStream is = httpRequestToStream(url, requestMethod, pa rams);

byte[] b = new byte[is.available()];

is.read(b);

result = new String(b);

}

catch(IOException e)

{

e.printStackTrace();

}

if (result != null)

{

JSONObject jsonObject = JSONObject.parseObject(result);

String status_code = jsonObject.getString("statusCode");

if (status_code == "000000")

{

// 状态码为000000, 说明请求成功

System.out.println("请求成功:" + jsonObject.getString("resu lt"));

}

else

{

// 状态码非000000, 说明请求失败

System.out.println("请求失败:" + jsonObject.getString("desc "));

}

}

else

{

// 返回内容异常,发送请求失败,以下可根据业务逻辑自行修改

System.out.println("发送请求失败");

}

}

}

3.获取植物信息

package net.apishop.www.controller;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection;

import https://www.360docs.net/doc/fe8098556.html,.MalformedURLException;

import https://www.360docs.net/doc/fe8098556.html,.URL;

import https://www.360docs.net/doc/fe8098556.html,.URLEncoder;

import java.util.HashMap;

import java.util.Map;

import com.alibaba.fastjson.JSONObject;

/**

* httpUrlConnection访问远程接口工具

*/

public class Api

{

/**

* 方法体说明:向远程接口发起请求,返回字节流类型结果

* param url 接口地址

* param requestMethod 请求方式

* param params 传递参数重点:参数值需要用Base64进行转码

* return InputStream 返回结果

*/

public static InputStream httpRequestToStream(String url, String re questMethod, Map 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.openConnecti on();

// 请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Con tent-Type为“”空)

conn.setRequestProperty("Content-Type", "application/octet-stream");

// conn.setRequestProperty("Content-Type", "application/x-w ww-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.getOut putStream());

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;

}

public static void main(String args[])

{

String url = "https://https://www.360docs.net/doc/fe8098556.html,/common/postcode/getPostCo deByAddr";

String requestMethod = "POST";

Map params = new HashMap(); params.put("apiKey","your_api_key"); //需要从https://www.360docs.net/doc/fe8098556.html,获取

params.put("plantID", ""); //植物ID

String result = null;

try

{

InputStream is = httpRequestToStream(url, requestMethod, pa rams);

byte[] b = new byte[is.available()];

is.read(b);

result = new String(b);

}

catch(IOException e)

{

e.printStackTrace();

}

if (result != null)

{

JSONObject jsonObject = JSONObject.parseObject(result);

String status_code = jsonObject.getString("statusCode");

if (status_code == "000000")

{

// 状态码为000000, 说明请求成功

System.out.println("请求成功:" + jsonObject.getString("resu lt"));

}

else

{

// 状态码非000000, 说明请求失败

System.out.println("请求失败:" + jsonObject.getString("desc "));

}

}

else

{

// 返回内容异常,发送请求失败,以下可根据业务逻辑自行修改

System.out.println("发送请求失败");

}

}

}

eoLinker-API_Shop_猫咪大全_API接口_Java调用示例代码

eoLinker-API Shop 猫咪大全 Java调用示例代码 猫咪大全 可查询猫咪相关信息,包括品种介绍、产地、性格、寿命、价格等信息,带图片。 该产品拥有以下APIs: 1.关键字获取猫类 2.获取猫类列表 3.获取猫类详细信息 注意,该示例代码仅适用于https://www.360docs.net/doc/fe8098556.html,网站下API使用该产品前,您需要通过https://https://www.360docs.net/doc/fe8098556.html,/#/api/detail/?productID=193申请API服务 1.关键字获取猫类 package net.apishop.www.controller; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection; import https://www.360docs.net/doc/fe8098556.html,.MalformedURLException; import https://www.360docs.net/doc/fe8098556.html,.URL; import https://www.360docs.net/doc/fe8098556.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; /** * httpUrlConnection访问远程接口工具 */ public class Api { /** * 方法体说明:向远程接口发起请求,返回字节流类型结果 * param url 接口地址 * param requestMethod 请求方式 * param params 传递参数重点:参数值需要用Base64进行转码 * return InputStream 返回结果 */ public static InputStream httpRequestToStream(String url, String re questMethod, Map params) {

WebApi系列~通过HttpClient来调用WebApi接口

回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有5个方法,而且都是标准的http方法,我觉得这种设计很不错,很清晰,而且为了实现安全性,它不支持使用传统的表单数据,取而代之的是FromBody参数,它指拿HttpRequestMessage里参数,而不是所有的Request数据,这是基于安全方面的考虑。一Api接口参数的标准性 Get方式,可以有多个重载,有多个参数 POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递 Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象 标准接口如图 二调用方,参数的标准性 在客户端进行接口调用时,我们以网页端为例,看一下网页端进行ajax跨域请求的代码

Get方式 $.ajax({ url: "http://localhost:52824/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); Post方式 $.ajax({ url: "http://localhost:52824/api/register", type: "POST", data: { '': '1' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value success: function (data) { console.log("post:" + data); } }); 三在控制台中实现Get方式获取接口数据(只有异步实现) ///

/// HttpClient实现Get请求 /// static async void dooGet() { string url = "http://localhost:52824/api/register?id=1&leval=5"; //创建HttpClient(注意传入HttpClientHandler) var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; using (var http = new HttpClient(handler)) { //await异步等待回应 var response = await http.GetAsync(url);

java发送http的get、post请求

package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import https://www.360docs.net/doc/fe8098556.html,.URL; import https://www.360docs.net/doc/fe8098556.html,.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> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(

基于JAVA的新闻数据接口调用代码实例

基于JA V A的新闻数据接口调用代码实例 代码描述:基于JA V A的新闻数据接口调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection; import https://www.360docs.net/doc/fe8098556.html,.URL; import https://www.360docs.net/doc/fe8098556.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *新闻调用示例代码-聚合数据 *在线接口文档:https://www.360docs.net/doc/fe8098556.html,/docs/138 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.新闻检索 public static void getRequest1(){ String result =null; String url ="https://www.360docs.net/doc/fe8098556.html,/onebox/news/query";//请求接口地址 Map params = new HashMap();//请求参数 params.put("q","");//需要检索的关键字,请UTF8 URLENCODE params.put("key",APPKEY);//应用APPKEY(应用详细页查询)

Java实现发送Http请求

Java实现发送Http请求 JDK中提供了一些对无状态协议请求(HTTP)的支持: 首先让我们先构建一个请求类(HttpRequester)。 该类封装了JAVA实现简单请求的代码,如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection; import https://www.360docs.net/doc/fe8098556.html,.URL; import java.nio.charset.Charset; import java.util.Map; import java.util.Vector; /** * HTTP请求对象 * * @author YYmmiinngg */ public class HttpRequester { private String defaultContentEncoding; public HttpRequester() { this.defaultContentEncoding = Charset.defaultCharset().name(); }

/** * 发送GET请求 * * @param urlString * URL地址 * @return 响应对象 * @throws IOException */ public HttpRespons sendGet(String urlString) throws IOException { return this.send(urlString, "GET", null, null); } /** * 发送GET请求 * * @param urlString * URL地址 * @param params * 参数集合 * @return 响应对象 * @throws IOException

基于JAVA的健康新闻接口调用代码实例

基于JAVA的健康新闻接口调用代码实例 代码描述:基于JA V A的健康新闻接口调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection; import https://www.360docs.net/doc/fe8098556.html,.URL; import https://www.360docs.net/doc/fe8098556.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *健康资讯调用示例代码-聚合数据 *在线接口文档:https://www.360docs.net/doc/fe8098556.html,/docs/145 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.资讯分类列表 public static void getRequest1(){ String result =null; String url ="https://www.360docs.net/doc/fe8098556.html,/yi18/news/newsclass";//请求接口地址

Java网络编程(三)HttpUrlConnection与HttpClient详解(雷惊风)

HttpUrlConnection与HttpClient详解 一.概念。 在Android开发中,AndroidSDK中对HTTP提供了很好的支持,主要包括两种接口。 1.一个是Sun公司提供的库,基于标准Java接口的 HttpURLConnection,这个类封装的很少,如果使用高级功 能,如重访问/Cookie/Session等就相当不方便。它可以实现 简单的基于URL的请求与相应功能。Google在Android Api23及以后的版本中推荐使用HttpURLConnention,在后 续版本中逐渐对其进行优化完善。在2.2版本以前,一直存 在着一些bug。比如对一个可读的InputStream调用close 方法时,可能会导致连接池失效。通常我们会禁用连接池功 能。 2.另一个是Apache公司提供的的HttpClient,它提供了高效的, 最新的功能丰富的api,支持Http协议工具包,支持HTTP 最新版本和建议,是个很好的开源框架,封装了http的请求, 参数,内容体,响应等,拥有众多API,但同时HttpClient 的API数量太多,如果不破坏兼容性的情况下想对他进行扩 展很麻烦。在API 23 SDK将其去掉了。建议使用 HttpURLConnection。 以上两种联网方式都支持HTTPS协议、以流的形式进行传输、 IPv6、配置超时时间、以及连接池等功能。

二.区别。 1.功能上,HttpClient库要丰富很多,提供了很多工具,封装了http 的请求头,参数,内容体,响应,还有一些高级功能,代理、COOKIE、鉴权、压缩、连接池的处理。 2.H ttpClient高级功能代码写起来比较复杂,对开发人员的要求会高 一些,而HttpURLConnection对大部分工作进行了包装,屏蔽了不需要的细节,适合开发人员直接调用。 3.HttpURLConnection在2.3版本增加了一些HTTPS方面的改进, 4.0版本增加一些响应的缓存。 4.HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但 要自己写代码处理。 5.HttpUrlConnection直接支持系统级连接池,即打开的连接不会直 接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好。 6.HttpUrlConnection直接在系统层面做了缓存策略处理(4.0版本 以上),加快了重复请求的速度。 7.HttpClient 适用于web browsers, 他们是可扩展的,并且拥有大 量的稳定APIs。但是,在不破坏其兼容性的前提下很难对如此多的APIs做修改。因此,Android 团队对修改优化Apache HTTP Client表现的并不积极。

java,http协议,接口

竭诚为您提供优质文档/双击可除java,http协议,接口 篇一:http接口 2.客户端:通过httpinvoker代理向服务器端发送请求,远程调用服务接口的方法 3.服务器端与客户端通信的数据需要序列化 配置服务器端和客户端的步骤 配置服务器端 1.添加springjaR文件 建议使用spring2+.jar版本 2.创建服务接口 3.创建服务接口的具体实现类 4.公开服务 配置客户端 1.添加springjaR文件 建议使用spring2+.jar版本 2.创建服务接口 3.访问服务 实例讲解

服务器端 1.服务接口:ucservice.java 它提供两项服务,查询用户信息和记录日志,如下: publicinterfaceucservice{ publicuserinfogetuserinfobyname(stringusername); publicintrecordlog(stringusername,stringpoint,strin goperate,stringdesc);} 说明:举这个列子是因为其比较有代表性,它将展示普通数据类型(int,long等)和复杂数据类型(dto等)的远程调用方式。userinfo是一个普通的dto,代码如下:publicclassuserinfoimplementsserializable{ privatestaticfinallongserialVersionuid=-69709675067 12260305l; /**用户名*/ privatestringusername; /**电子邮箱*/ privatestringemail; /**注册日期*/ privatedateregistdate; publicstringgetusername(){

Java httpclient解决方案中的中文传递

Java httpclient解决方案中的中文传递(2009-03-05 17:21:33) 标签:杂谈 1 Commons HttpClient 开源项目简介 Http 协议是一种应用十分广泛的网络应用层协议。在Java 网络编程中我们会经常碰到Http 协议编程, 虽然JDK 提供了 HttpURLConnection 编程接口对Http 协议进行支持, 但是由于协议应用本身 的复杂性, 使得在大量实际项目单纯使用JDK 进行Http编程仍然相对比较困难。针对这种情况, 开源软件组织Apach 推出了HttpClient 开源组件, 并且提供稳定持续的升级版本, 因此在实际项目中采用HttpClient 组件进行Http 协议编程是一种高效经济的解决方案。 2 Commons HttpClient 中文环境下编程常见问题 由于HttpClient 组件设计的高度灵活性及易用性, 应用HttpClient 组件进行编程本身并不复杂。但是由于Java 编程环境自身容易出现字符编码问题, 衍生于Java 语言并主要由英语语系国家技术人员推出的HttpClient 组件自然在中文环境中会存在一定的编码问题, 同时由于部分Web 浏览器及Web 服务器并未严格实现标准Http 协议规范, 使得比较严格遵循标准Http 协议规范的 Http-Client 组件在与部分浏览器及服务器进行交互时会出现少量兼容性问题。笔者在中文环境下用HttpClinet 开发校外资源访问系统的过程中碰到系列HttpClient 技术问题, 经过测试查证找到相应的解决办法, 这对解决HttpClient 编程问题, 特别是中文环境下Http-Client 编程具有较大的借鉴 作用。( 注: 本文编程的HttpClient 组件版本为: Release 3.1 Beta 1) 3 Commons HttpClient 编程的典型问题及解决办法 3.1 URL 中文参数无法识别的问题 通常情况在Commons HttpClient 编程中我们用下列语句就可以向一个目标服务器提交一个Web 请求: HttpClient client=new HttpClient(); GetMethod method = new GetMethod (url);//本示例使用Get 方法, 当然也可使用Post 方法PostMethod method//=new PostMethod(url); client.executeMethod(method); InputStream receiver=method.getResponseBodyAsStream(); 如果URL 没有中文参数,以上语句执行起来没有任何问题,但是如果URL 中含有中文字符,中文参数将无法被Web 服务器识别, 程序虽然可以正常运行, 但却 无法得到正确结果。同时返回的Http 响应头, 如果含有中文字符也将出现乱码。分析源码发现, 这是HttpClient 中的HttpElementCharset 参数( 创建HTTP headers 的字符集) 的默认值为US- ASCII, ContentCharset 参数( 创建contentbody 的字符集) 的默认值为ISO- 8859- 1 的原故, 因此需要使用下列语句改变这些参数的默认值: client = new HttpClient(); params=client.getParams(); params.setHttpElementCharset("GBK"); params.setContentCharset("GBK"); 或者使用:

java程序请求Http请求,返回其网页源文件,xml 等都可以返回

package com.sun.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import https://www.360docs.net/doc/fe8098556.html,.MalformedURLException; import https://www.360docs.net/doc/fe8098556.html,.URL; import javax.swing.JFrame; public class Resol extends JFrame { // 读取url对象所引用的web页 public void readPage(URL url) { BufferedReader reader = null; String line; StringBuffer str = new StringBuffer(); try { // 获取url输入流 reader = new BufferedReader(new InputStreamReader(url.openStream())); // 读取一行,并添加至tPage中 while ((line = reader.readLine()) != null) str.append(line); } catch (IOException ie) { } finally { try { if (reader != null) reader.close(); } catch (Exception e) { } } System.out.println(str.toString()); } public static void main(String[] args) { Resol me = new Resol(); try { me.readPage(new URL("https://www.360docs.net/doc/fe8098556.html,")); } catch (MalformedURLException e) { e.printStackTrace(); } } }

JAVA利用HttpClient进行POST请求(HTTPS)

JAVA利用HttpClient进行POST请求(HTTPS) 分类: java(31) jsp(1) 目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目 用jQuery post进行请求。 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post 请求是不允许跨域的。 这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避 免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。 1.写一个SSLClient类,继承至HttpClient [java]view plain copy 1.import java.security.cert.CertificateException; 2.import java.security.cert.X509Certificate; 3.import https://www.360docs.net/doc/fe8098556.html,.ssl.SSLContext; 4.import https://www.360docs.net/doc/fe8098556.html,.ssl.TrustManager; 5.import https://www.360docs.net/doc/fe8098556.html,.ssl.X509TrustManager; 6.import org.apache.http.conn.ClientConnectionManager; 7.import org.apache.http.conn.scheme.Scheme; 8.import org.apache.http.conn.scheme.SchemeRegistry; 9.import org.apache.http.conn.ssl.SSLSocketFactory; 10.import org.apache.http.impl.client.DefaultHttpClient; 11.//用于进行Https请求的HttpClient 12.public class SSLClient extends DefaultHttpClient{ 13.public SSLClient() throws Exception{ 14.super(); 15. SSLContext ctx = SSLContext.getInstance("TLS"); 16. X509TrustManager tm = new X509TrustManager() { 17.@Override 18.public void checkClientTrusted(X509Certificate[] chain, 19. String authType) throws CertificateException { 20. } 21.@Override 22.public void checkServerTrusted(X509Certificate[] chain, 23. String authType) throws CertificateException { 24. }

Java接口自动化测试实践

Java接口自动化测试实践 众所周知,在现在这个移动互联网越来越发达的时代,瘦客户端和胖服务端的要求下,服务端的测试也变得越来越重要。而服务端的实现通常是通过HTTP请求的API和服务来实现的,而服务由于实现起来比较复杂,所以大多公司使用的还是HTTP请求的API接口来处理底层数据。在前面的博文中我们讲过了如何使用PHPUNIT框架和python的urllib2和reqests模块,来进行接口自动化测试。 可是很多同学比较善长java,如果想用这个来做接口自动化测试的化,还是有点儿麻烦的。因为没有具体的函数,需要利用HttpClient来模拟HTTP请求,并对接口的返回值进行处理才行。下面我们就讲解,如何用java来封装对HTTP请求的API来做自动化测试: 一、GET方式的请求 Get类请求分为有参数和无参数两种情况,如果没有参数,则直接通过接口调用地址进行请求,接收返回结果;如果有参数,则把参数添加进来,对请求的结果进行筛选。

码后,就成为%式样的字符串 method.setQueryString(URIUtil.encodeQuery(params)); client.executeMethod(method); BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(),"utf-8")); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); } catch (URIException e) { System.out.println("执行HTTP Get请求时,编码查询字符串“" + params + "”发生异常!"); } catch (IOException e) { System.out.println("执行HTTP Get请求" + url + "时,发生异常!"); } finally { method.releaseConnection(); } return response.toString(); } 代码分析:

基于JAVA的网站监测api调用代码实例

基于JA V A的网站监测api调用代码实例 代码描述:基于JA V A的网站监测api调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection; import https://www.360docs.net/doc/fe8098556.html,.URL; import https://www.360docs.net/doc/fe8098556.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *网站监测调用示例代码-聚合数据 *在线接口文档:https://www.360docs.net/doc/fe8098556.html,/docs/140 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.创建任务 public static void getRequest1(){ String result =null; String url ="https://www.360docs.net/doc/fe8098556.html,/webxmf/createTask";//请求接口地址 Map params = new HashMap();//请求参数 params.put("key",APPKEY);//您申请到的APPKEY

HTTP头部详解及使用JAVA套接字处理HTTP请求

HTTP头部详解及使用Java套接字处理HTTP请求 进行Web开发关键是要了解超文本传输协议(HTTP),该协议用来传输网页图像以及因特网上在浏览器与服务器间传输的其他类型文件只要你在浏览器上输入一个URL,最前面的http://就表示使用HTTP来访问指定位置的信息(大部分浏览器还支持其他一些不同的协议,其中FTP就是一个典型例子) 本文从HTTP协议的结构上初步探讨HTTP协议的工作原理和请求响应格式,并最后通过一个使用Java编写的小HTTP服务器验证了如何处理和响应HTTP请求 HTTP由两部分组成:请求和响应当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以及位于指定URL(如果有的话)的数据直到浏览器解析该响应并显示出网页(或其他资源)为止 HTTP请求 HTTP请求的格式如下所示: <request-line> <headers> <blank line> [<request-body>] 在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型要访问的资源以及使用的HTTP版本紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)] 在HTTP中,定义了大量的请求类型,不过Ajax开发人员关心的只有GET 请求和POST请求只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源对于https://www.360docs.net/doc/fe8098556.html, 的GET请求如下所示: GET/HTTP/1.1 Host:https://www.360docs.net/doc/fe8098556.html, User-Agent:Mozilla/5.0(Windows;U;Windows NT5.1;en-US;rv:1.7.6)

基于JAVA的新华字典接口调用代码实例

基于JAVA的新华字典接口调用代码实例 接口描述:基于JA V A的新华字典接口调用代码实例 接口平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fe8098556.html,.HttpURLConnection; import https://www.360docs.net/doc/fe8098556.html,.URL; import https://www.360docs.net/doc/fe8098556.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *新华字典调用示例代码-聚合数据 *在线接口文档:https://www.360docs.net/doc/fe8098556.html,/docs/156 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.根据汉字查询字典 public static void getRequest1(){ String result =null; String url ="https://www.360docs.net/doc/fe8098556.html,/xhzd/query";//请求接口地址 Map params = new HashMap();//请求参数

java调用webservice接口方法

java调用webservice接口方法 webservice的发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表 https://www.360docs.net/doc/fe8098556.html,/WCF/default.aspx 这上面列出了70多个包括很多方面的free webservice provider, utilities->global weather就可以获取全球的天气预报。 下面我们来看Java如何通过WSDL文件来调用这些web service: 注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis 相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。 1,直接AXIS调用远程的web service 我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下: import java.util.Date; import java.text.DateFormat; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import https://www.360docs.net/doc/fe8098556.html,space.QName; import https://www.360docs.net/doc/fe8098556.html,ng.Integer; import javax.xml.rpc.ParameterMode; public class caClient { public static void main(String[] args) { try { String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl"; //直接引用远程的wsdl文件 //以下都是套路 Service service = new Service(); Call call = (Call) service.createCall();

java 使用HttpClient过程中常见的一些问题

使用HttpClient过程中常见的一些问题 下面介绍在使用HttpClient过程中常见的一些问题。 字符编码 某目标页的编码可能出现在两个地方,第一个地方是服务器返回的http头中,另外一个地方是得到的html/xml页面中。 ?在http头的Content-Type字段可能会包含字符编码信息。例如可能返回的头会包含这样子的信息:Content-Type:text/html;charset=UTF-8。这个头信息表明该页的编码是UTF-8,但是服务 器返回的头信息未必与内容能匹配上。比如对于一些双字节语言国家,可能服务器返回的编码类型是UTF-8,但真正的内容却不是UTF-8编码的,因此需要在另外的地方去得到页面的编码信息; 但是如果服务器返回的编码不是UTF-8,而是具体的一些编码,比如gb2312等,那服务器返回 的可能是正确的编码信息。通过method对象的getResponseCharSet()方法就可以得到http头中的编码信息。 ?对于象xml或者html这样的文件,允许作者在页面中直接指定编码类型。比如在html中会有这样的标签;或者在xml中会有这样的标签,在这些情况下,可能与http头中返回的编码信息冲突,需要用户自己判断到底那种编码类型应该是真正的编码。 自动转向 根据RFC2616中对自动转向的定义,主要有两种:301和302。301表示永久的移走(Moved Permanently),当返回的是301,则表示请求的资源已经被移到一个固定的新地方,任何向该地址发起请求都会被转到新的地址上。302表示暂时的转向,比如在服务器端的servlet程序调用了sendRedirect方法,则在客户端就会得到一个302的代码,这时服务器返回的头信息中location的值就是sendRedirect转向的目标地址。HttpClient支持自动转向处理,但是象POST和PUT方式这种要求接受后继服务的请求方式,暂时不支持自动转向,因此如果碰到POST方式提交后返回的是301或者302的话需要自己处理。就像刚才在POSTMethod中举的例子:如果想进入登录BBS后的页面,必须重新发起登录的请求,请求的地址可以在头字段location中得到。不过需要注意的是,有时候location返回的可能是相对路径,因此需要对location 返回的值做一些处理才可以发起向新地址的请求。 另外除了在头中包含的信息可能使页面发生重定向外,在页面中也有可能会发生页面的重定向。引起页面自动转发的标签是:。如果你想在程序中也处理这种情况的话得自己分析页面来实现转向。需要注意的是,在上面那个标签中url的值也可以是一个相对地址,如果是这样的话,需要对它做一些处理后才可以转发。 处理HTTPS协议 HttpClient提供了对SSL的支持,在使用SSL之前必须安装JSSE。在Sun提供的1.4以后的版本中,JSSE 已经集成到JDK中,如果你使用的是JDK1.4以前的版本则必须安装JSSE。JSSE不同的厂家有不同的实现。下面介绍怎么使用HttpClient来打开Https连接。这里有两种方法可以打开https连接,第一种就是得到服务器颁发的证书,然后导入到本地的keystore中;另外一种办法就是通过扩展HttpClient的类来实现自动接受证书。 方法1,取得证书,并导入本地的keystore: ?安装JSSE(如果你使用的JDK版本是1.4或者1.4以上就可以跳过这一步)。本文以IBM的JSSE为例子说明。先到IBM网站上下载JSSE的安装包。然后解压开之后将ibmjsse.jar包拷贝到\lib\ext\目录下。 ?取得并且导入证书。证书可以通过IE来获得:

相关文档
最新文档