接口自动化第二篇---HttpURLConnection的使用
·
package com.demo;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/*
*1.get http://v.juhe.cn/weather/index?format=2&cityname=深圳&key=9679a0703822fe67b9cff961ba197b02
* post body体中的三种样式
*2.post http://v.juhe.cn/weather/index x-www-form-urlencoded format=2&cityname=深圳&key=9679a0703822fe67b9cff961ba197b02
*3.post http://v.juhe.cn/weather/index application/json {"format":"2","cityname":"深圳","key"="9679a0703822fe67b9cff961ba197b02"}
*4.post http://v.juhe.cn/weather/index text/plain this is test
* 3和4情况类似
**/
public class InterfaceTest {
//“GET”请求方式
public static void get(String url){
HttpURLConnection conn=null;
InputStream in=null;
try {
//创建连接实例
conn= (HttpURLConnection) new URL(url).openConnection();
//设置请求方法
conn.setRequestMethod("GET");
//// 设置是否向httpUrlConnection输出,因为这个是get请求,因此需要设为false, 默认情况下是false;
conn.setDoOutput(false);
//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置false。默认值为 true。
conn.setDoInput(true);
//设置链接超时时间,单位为毫秒
conn.setConnectTimeout(20000);
//是否设置缓存
conn.setUseCaches(false);
conn.connect();
//得到服务器返回的流数据
in=conn.getInputStream();
//创建一个byte数组
byte[] b=new byte[1024];
int index;
//创建一个StringBuffer来进行字符串的拼接
StringBuffer sb=new StringBuffer();
//当有数据进来的时候怎么处理
while((index=in.read(b))!=-1){
sb.append(new String(b,0,index));
}
//得到最终的字符串结果
String response=sb.toString();
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//得到拼接后的字符串之后与服务器断开连接,放在finally是为了保证每次连接服务器得到我们想要的数据后,都会与服务器断开连接,从而减轻服务器的负载压力
if(conn!=null){
conn.disconnect();
}
//关闭流
if(in!=null){
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//“POST”请求方式
public static void post(String url, String body){
HttpURLConnection conn=null;
InputStream in=null;
OutputStream out=null;
try {
//创建连接实例
conn= (HttpURLConnection) new URL(url).openConnection();
//设置请求方法
conn.setRequestMethod("POST");
//// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
//// http正文内,因此需要设为true, 默认情况下是false;
conn.setDoOutput(true);
//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置false。默认值为 true。
conn.setDoInput(true);
//设置链接超时时间,单位为毫秒
conn.setConnectTimeout(20000);
conn.setReadTimeout(20000);
//是否设置缓存
conn.setUseCaches(false);
// 设定传送的内容类型是可序列化的java对象
//(如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
conn.setRequestProperty("Content-type","x-www-form-urlencoded;Charset=utf-8");
conn.connect();
out=conn.getOutputStream();
//将post请求中放入form表单中的参数转化为byte数组的形式
out.write(body.getBytes());
// 比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区)
// ,当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,
// 那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢
// 那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,
// 这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。
//清除缓存区,防止数据遗漏
out.flush();
//得到服务器返回的流数据
in=conn.getInputStream();
//创建一个byte数组
byte[] b=new byte[1024];
int index;
//创建一个StringBuffer来进行字符串的拼接
StringBuffer sb=new StringBuffer();
//当有数据进来的时候怎么处理
while((index=in.read(b))!=-1){
sb.append(new String(b,0,index));
}
//得到最终的字符串结果
String response=sb.toString();
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//得到拼接后的字符串之后与服务器断开连接,放在finally是为了保证每次连接服务器得到我们想要的数据后,都会与服务器断开连接,从而减轻服务器的负载压力
if(conn!=null){
conn.disconnect();
}
//关闭流
if(in!=null){
in.close();
}
//关闭流
if(out!=null){
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//“POST”请求方式
public static void post(String url, Map<String,String> params){
HttpURLConnection conn=null;
InputStream in=null;
OutputStream out=null;
StringBuffer outParams=new StringBuffer();
for(String key:params.keySet()){
if(outParams.length()!=0){
outParams.append("&");
}
outParams.append(key).append("=").append(params.get(key));
}
try {
//创建连接实例
conn= (HttpURLConnection) new URL(url).openConnection();
//设置请求方法
conn.setRequestMethod("POST");
//// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
//// http正文内,因此需要设为true, 默认情况下是false;
conn.setDoOutput(true);
//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置false。默认值为 true。
conn.setDoInput(true);
//设置链接超时时间,单位为毫秒
conn.setConnectTimeout(20000);
conn.setReadTimeout(20000);
//是否设置缓存
conn.setUseCaches(false);
// 设定传送的内容类型是可序列化的java对象
// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
// conn.setRequestProperty("Content-type","application/json;Charset=utf-8");
conn.connect();
out=conn.getOutputStream();
//将post请求中放入form表单中的参数转化为byte数组的形式
out.write(outParams.toString().getBytes());
// 比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区)
// ,当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,
// 那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢
// 那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,
// 这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。
//清除缓存区,防止数据遗漏
out.flush();
//得到服务器返回的流数据
in=conn.getInputStream();
//创建一个byte数组
byte[] b=new byte[1024];
int index;
//创建一个StringBuffer来进行字符串的拼接
StringBuffer sb=new StringBuffer();
//当有数据进来的时候怎么处理
while((index=in.read(b))!=-1){
sb.append(new String(b,0,index));
}
//得到最终的字符串结果
String response=sb.toString();
System.out.println(response);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
//得到拼接后的字符串之后与服务器断开连接,放在finally是为了保证每次连接服务器得到我们想要的数据后,都会与服务器断开连接,从而减轻服务器的负载压力
if(conn!=null){
conn.disconnect();
}
//关闭流
if(in!=null){
in.close();
}
//关闭流
if(out!=null){
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String []args){
//get("http://apis.juhe.cn/mobile/get?phone=13031155057&key=8ca9591f9776b021fa2b9a26bd9dee97");
Map<String,String> map=new HashMap<String, String>();
map.put("key","24f59d857d2ad45011946fede9ae5d55");
// post("http://v.juhe.cn/wepiao/query",map);
post("http://v.juhe.cn/wepiao/query","{\"key\":\"24f59d857d2ad45011946fede9ae5d55\"}");
}
}
更多推荐
所有评论(0)