httpclient httpget接口小demo

刚开始学习写http接口,这只是get请求的一个简单的小例子,其中还是很有收获的,简单的理解了一下http协议。其中有几个需要注意的地方:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.LinkedHashMap;
import java.util.Map;
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;
import org.testng.annotations.Test;
import com.bj58.qa.atf.listener.Logger;
import com.bj58.qa.m.data.initParamProvider;


public class SearchCase {
public String paraUrl(String url,Map<String,String> map){
if(!url.contains("?")){
url+="?";
}
if(!url.startsWith("http://")){
url="http://"+url;
}
if(map!=null && !map.isEmpty()){
for(Map.Entry<String, String> para:map.entrySet()){
if(para.getValue()==null){
url+=para.getKey()+"="+"&";
}else{
url+=para.getKey()+"="+para.getValue()+"&";
}
}
url=url.substring(0,url.length()-1);
}
return url;
}
@Test(dataProvider="searchdata",dataProviderClass=initParamProvider.class)
public void searchBox(String keys) throws UnsupportedEncodingException{
BufferedReader in = null;
Map<String,String> map=new LinkedHashMap();
map.put("inputbox", keys);
map.put("cityid","1");
map.put("catid", "0");
map.put("clinet", "m");
map.put("callback","callback");

String url=paraUrl("http://suggest.58.com.cn/searchsuggest_14.do",map);
Logger.log("url="+url,true);
HttpClient httpc=new  DefaultHttpClient();
try{
HttpGet httpgets=new HttpGet(url);
HttpResponse httpres=httpc.execute(httpgets);

if(httpres.getStatusLine().getStatusCode()==200||httpres.getStatusLine().getStatusCode()==201){
     in=new BufferedReader(new InputStreamReader(httpres.getEntity()  
                     .getContent()));  
StringBuffer sb = new StringBuffer("");  
           String line = "";  
           String NL = System.getProperty("line.separator");//此方法 是获取系统属性的值,下面会列出别的博友写的这个方法的一些用法 
           System.out.println(NL);
           try{
           while ((line = in.readLine()) != null) {  
               sb.append(line+NL);  
           }  
           in.close();  
           String result = sb.toString();  
           Logger.log(result,true);
           Logger.log("=======================");
//            Logger.log(EntityUtils.toString(httpres.getEntity(),"GBK"));//getEntity()只能获取一个实体,不可重复获取,可能会报出 实体流关闭的异常
//            Logger.log(EntityUtils.toString(httpres.getEntity(),"utf-8"));
           }catch(IOException e){
             e.printStackTrace();
           }
}
}catch(Exception e){
e.printStackTrace();
}
finally {  
           if (in != null) {  
                try {  
                    in.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            } 
        }  
}

}

其实现在我还有一个比较纠结的问题没有解决 ,就是 用EntityUtils.toString()方法解析的 实体会存在中文乱码的现象,但是同样用数据流自己解析出来的InputStream流中的内容就不存在中文乱码的问题,希望已经解决了这方面问题的网友能给我也解释一下。


BufferedReader in = null;  
        try {  
        HttpClient client = new DefaultHttpClient();
            HttpPost request = new HttpPost("http://m.58.com/AddInterfacePerson");  
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();


            parameters.add(new BasicNameValuePair("InterfacePersonInfo", "{\"mailid\":\"111\",\"phonenumber\":\"111\",\"interfaceperson\":\"111\"}"));  
            UrlEncodedFormEntity formEntiry = new UrlEncodedFormEntity(parameters);  
            request.setEntity(formEntiry);  
            // 执行请求  
            HttpResponse response = client.execute(request);  
  
            in = new BufferedReader(new InputStreamReader(response.getEntity()  
                    .getContent()));  
            StringBuffer sb = new StringBuffer("");  
            String line = "";  
            String NL = System.getProperty("line.separator");
            while ((line = in.readLine()) != null) {  
                sb.append(line + NL);  
            }  
            in.close();  
            String result = sb.toString();  
            return result;  
       
        } finally {  
            if (in != null) {  
                try {  
                    in.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.LinkedHashMap;
import java.util.Map;
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;
import org.testng.annotations.Test;
import com.bj58.qa.atf.listener.Logger;
import com.bj58.qa.m.data.initParamProvider;


public class SearchCase {
public String paraUrl(String url,Map<String,String> map){
if(!url.contains("?")){
url+="?";
}
if(!url.startsWith("http://")){
url="http://"+url;
}
if(map!=null && !map.isEmpty()){
for(Map.Entry<String, String> para:map.entrySet()){
if(para.getValue()==null){
url+=para.getKey()+"="+"&";
}else{
url+=para.getKey()+"="+para.getValue()+"&";
}
}
url=url.substring(0,url.length()-1);
}
return url;
}
@Test(dataProvider="searchdata",dataProviderClass=initParamProvider.class)
public void searchBox(String keys) throws UnsupportedEncodingException{
BufferedReader in = null;
Map<String,String> map=new LinkedHashMap();
map.put("inputbox", keys);
map.put("cityid","1");
map.put("catid", "0");
map.put("clinet", "m");
map.put("callback","callback");

String url=paraUrl("http://suggest.58.com.cn/searchsuggest_14.do",map);
Logger.log("url="+url,true);
HttpClient httpc=new  DefaultHttpClient();
try{
HttpGet httpgets=new HttpGet(url);
HttpResponse httpres=httpc.execute(httpgets);

if(httpres.getStatusLine().getStatusCode()==200||httpres.getStatusLine().getStatusCode()==201){
     in=new BufferedReader(new InputStreamReader(httpres.getEntity()  
                     .getContent()));  
StringBuffer sb = new StringBuffer("");  
           String line = "";  
           String NL = System.getProperty("line.separator");//此方法 是获取系统属性的值,下面会列出别的博友写的这个方法的一些用法 
           System.out.println(NL);
           try{
           while ((line = in.readLine()) != null) {  
               sb.append(line+NL);  
           }  
           in.close();  
           String result = sb.toString();  
           Logger.log(result,true);
           Logger.log("=======================");
//            Logger.log(EntityUtils.toString(httpres.getEntity(),"GBK"));//getEntity()只能获取一个实体,不可重复获取,可能会报出 实体流关闭的异常
//            Logger.log(EntityUtils.toString(httpres.getEntity(),"utf-8"));
           }catch(IOException e){
             e.printStackTrace();
           }
}
}catch(Exception e){
e.printStackTrace();
}
finally {  
           if (in != null) {  
                try {  
                    in.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            } 
        }  
}
}

其实现在我还有一个比较纠结的问题没有解决 ,就是 用EntityUtils.toString()方法解析的 实体会存在中文乱码的现象,但是同样用数据流自己解析出来的InputStream流中的内容就不存在中文乱码的问题,希望已经解决了这方面问题的网友能给我也解释一下。


BufferedReader in = null;  
        try {  
        HttpClient client = new DefaultHttpClient();
            HttpPost request = new HttpPost("http://m.58.com/AddInterfacePerson");  
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();


            parameters.add(new BasicNameValuePair("InterfacePersonInfo", "{\"mailid\":\"111\",\"phonenumber\":\"111\",\"interfaceperson\":\"111\"}"));  
            UrlEncodedFormEntity formEntiry = new UrlEncodedFormEntity(parameters);  
            request.setEntity(formEntiry);  
            // 执行请求  
            HttpResponse response = client.execute(request);  
  
            in = new BufferedReader(new InputStreamReader(response.getEntity()  
                    .getContent()));  
            StringBuffer sb = new StringBuffer("");  
            String line = "";  
            String NL = System.getProperty("line.separator");
            while ((line = in.readLine()) != null) {  
                sb.append(line + NL);  
            }  
            in.close();  
            String result = sb.toString();  
            return result;  
       
        } finally {  
            if (in != null) {  
                try {  
                    in.close();  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  




java.version

Java 运行时环境版本

java.vendor

Java 运行时环境供应商

java.vendor.url

Java 供应商的 URL

java.home

Java 安装目录

java.vm.specification.version

Java 虚拟机规范版本

java.vm.specification.vendor

Java 虚拟机规范供应商

java.vm.specification.name

Java 虚拟机规范名称

java.vm.version

Java 虚拟机实现版本

java.vm.vendor

Java 虚拟机实现供应商

java.vm.name

Java 虚拟机实现名称

java.specification.version

Java 运行时环境规范版本

java.specification.vendor

Java 运行时环境规范供应商

java.specification.name

Java 运行时环境规范名称

java.class.version

Java 类格式版本号

java.class.path

Java 类路径

java.library.path

加载库时搜索的路径列表

java.io.tmpdir

默认的临时文件路径

java.compiler

要使用的 JIT 编译器的名称

java.ext.dirs

一个或多个扩展目录的路径

os.name

操作系统的名称

os.arch

操作系统的架构

os.version

操作系统的版本

file.separator

文件分隔符(在 UNIX 系统中是“/”)

path.separator

路径分隔符(在 UNIX 系统中是“:”)

line.separator

行分隔符(在 UNIX 系统中是“/n”)

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值