繁体   English   中英

如何创建一个使用Java发送发布请求的http客户端

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

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

谁能推荐我该怎么做。

谢谢

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

用HttpClient编写正文请求

来自MkYong的示例提供了添加标头的示例代码;

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

也许您可以使用apache的子项目之一HttpClient。

这是一个演示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM