Ock
Ock

Reputation: 1330

how to create an http client for sending post request using java

i would like to implement an simple http client which can send http post request with some extra headers and string xml body content inside of the payload of the request using java language.

Can anyone recommend me how can I do it.

Thank you

Upvotes: 1

Views: 9733

Answers (2)

Lcc
Lcc

Reputation: 21

maybe you can use it.HttpClient,that one of the apache's subproject.

this is a demo:

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;  
}  

}

and you can use it like that:

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);  

Upvotes: 2

CuriousCat
CuriousCat

Reputation: 52

You could use java.net.HttpURLConnection or third party libraries like Apache HttpClient. Here is a StackOverflow thread where you can find answer for loading an XML;

Write in body request with HttpClient

This example from MkYong has sample code for adding headers;

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

Upvotes: 3

Related Questions