如何创建一个http客户端使用java发送post请求

问题描述:

我想实现一个简单的http客户端,它可以发送带有一些额外的头文件和字符串xml正文内容的请求使用Java语言的请求负载内的http post请求。如何创建一个http客户端使用java发送post请求

任何人都可以推荐我怎么做。

谢谢

+0

https://www.google.de/#q=java+ http + client – JohnnyAW

你可以使用java.net.HttpURLConnection或第三方库,比如Apache的HttpClient。这里是一个*线程,您可以在其中找到加载XML的答案;

Write in body request with HttpClient

从MkYong该示例具有示例代码添加标头;

https://www.mkyong.com/java/apache-httpclient-examples/

+0

非常感谢! – Sonn

也许你可以使用it.HttpClient,使apache的之一。

这是一个演示:

import java.io.IOException; 
import java.io.UnsupportedEncodingException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 
import java.util.Set;  
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
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.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.methods.HttpUriRequest; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.protocol.HTTP; 
import org.apache.http.util.EntityUtils; 
import org.apache.log4j.Logger; 

public class HttpXmlClient { 
private static Logger log = Logger.getLogger(HttpXmlClient.class); 
public static String post(String url, Map<String, String> params) { 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    String body = null; 
    log.info("create httppost:" + url); 
    HttpPost post = postForm(url, params);    
    body = invoke(httpclient, post);    
    httpclient.getConnectionManager().shutdown();    
    return body; 
}   
public static String get(String url) { 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    String body = null;    
    log.info("create httppost:" + url); 
    HttpGet get = new HttpGet(url); 
    body = invoke(httpclient, get);    
    httpclient.getConnectionManager().shutdown();    
    return body; 
}   
private static String invoke(DefaultHttpClient httpclient, 
     HttpUriRequest httpost) { 
    HttpResponse response = sendRequest(httpclient, httpost); 
    String body = paseResponse(response); 
    return body; 
}  
private static String paseResponse(HttpResponse response) { 
    log.info("get response from http server.."); 
    HttpEntity entity = response.getEntity();    
    log.info("response status: " + response.getStatusLine()); 
    String charset = EntityUtils.getContentCharSet(entity); 
    log.info(charset);    
    String body = null; 
    try { 
     body = EntityUtils.toString(entity); 
     log.info(body); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }    
    return body; 
}  
private static HttpResponse sendRequest(DefaultHttpClient httpclient, 
     HttpUriRequest httpost) { 
    log.info("execute post..."); 
    HttpResponse response = null;    
    try { 
     response = httpclient.execute(httpost); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return response; 
} 
private static HttpPost postForm(String url, Map<String, String>  params){    
    HttpPost httpost = new HttpPost(url); 
    List<NameValuePair> nvps = new ArrayList <NameValuePair>();    
    Set<String> keySet = params.keySet(); 
    for(String key : keySet) { 
     nvps.add(new BasicNameValuePair(key, params.get(key))); 
    }    
    try { 
     log.info("set utf-8 form entity to httppost"); 
     httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    }    
    return httpost; 
} 

}

,你可以使用它像:

Map<String, String> params = new HashMap<String, String>(); 
params.put("name", name); 
params.put("password", password);  
String xml = HttpXmlClient.post(loginUrl, params); 
log.info(xml);