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

时间:2016-08-30 22:18:42

标签: java http-post httpclient

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

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

谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用{HIDpClient}等java.net.HttpURLConnection或第三方库。这是一个StackOverflow线程,您可以在其中找到加载XML的答案;

Write in body request with HttpClient

MkYong的这个例子有添加标题的示例代码;

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

答案 1 :(得分:2)

也许你可以使用它.HttpClient,那个apache的subproject之一。

这是一个演示:

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);  
相关问题