HttpUtil.java 4.8 KB
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.xml.soap.Name;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class HttpUtil {

	
	
	public static void main(String[] args) throws ParseException, IOException {  
	    String url="http://php.weather.sina.com.cn/iframe/index/w_cl.php";  
	    Map<String, String> map = new HashMap<String, String>();  
	    map.put("code", "js");  
	    map.put("day", "0");  
	    map.put("city", "上海");  
	    map.put("dfc", "1");  
	    map.put("charset", "utf-8");  
	    String body = httpPost(url, map,"utf-8");  
	    System.out.println("交易响应结果:");  
	    System.out.println(body);  
	  
	    System.out.println("-----------------------------------");  
	  
	    map.put("city", "北京");  
	    body = send(url, map, "utf-8");  
	    System.out.println("交易响应结果:");  
	    System.out.println(body);  
	}  
	
	
	//post请求
	
	public static String httpPost(String url,Map<String,String> map,String encoding) throws UnsupportedEncodingException{
        String body = "";  

		CloseableHttpClient client=HttpClients.createDefault();
		HttpPost httpPost = new  HttpPost(url);
		
		List<NameValuePair> nvps= new ArrayList<NameValuePair>();
		//参数赋值
		if(map!=null){
            for (Entry<String, String> entry : map.entrySet()) {  
            		nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
			}
		}
		
		httpPost.setEntity(new UrlEncodedFormEntity(nvps,encoding));
		
		System.out.println("请求地址:"+url);
		System.out.println("请求参数:"+nvps.toString());
		httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");  
	    httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
	    try {
	    	CloseableHttpResponse response=client.execute(httpPost);
	    	HttpEntity entity=response.getEntity();
	    	if(entity!=null){
	    		body=EntityUtils.toString(entity, encoding);
	    	}
	    	//关闭httpEntiy流
	    	EntityUtils.consume(entity);
	    	response.close();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
		return body;
	}
	
	 
	 /** 
     * 模拟请求 
     *  
     * @param url       资源地址 
     * @param map   参数列表 
     * @param encoding  编码 
     * @return 
     * @throws ParseException 
     * @throws IOException 
     */  
    public static String send(String url, Map<String,String> map,String encoding) throws ParseException, IOException{  
        String body = "";  
  
        //创建httpclient对象  
        CloseableHttpClient client = HttpClients.createDefault();  
        //创建post方式请求对象  
        HttpPost httpPost = new HttpPost(url);  
          
        //装填参数  
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();  
        if(map!=null){  
            for (Entry<String, String> entry : map.entrySet()) {  
                nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));  
            }  
        }  
        //设置参数到请求对象中  
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, encoding));  
  
        System.out.println("请求地址:"+url);  
        System.out.println("请求参数:"+nvps.toString());  
          
        //设置header信息  
        //指定报文头【Content-type】、【User-Agent】  
        httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");  
        httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
          
        //执行请求操作,并拿到结果(同步阻塞)  
        CloseableHttpResponse response = client.execute(httpPost);  
        //获取结果实体  
        HttpEntity entity = response.getEntity();  
        if (entity != null) {  
            //按指定编码转换结果实体为String类型  
            body = EntityUtils.toString(entity, encoding);  
        }  
        EntityUtils.consume(entity);  
        //释放链接  
        response.close();  
        return body;  
    }  
    
    
    
    
    
    
    
    
    
    
    
    
}