您的位置:首页 > 理论基础 > 计算机网络

httpClient Post例子,Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete

2016-10-18 00:35 766 查看
httpclient post方法

Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete
逻辑:

String url = "http://www.baidu.com";

//将要访问的url字符串放入HttpPost中

HttpPost httpPost = new HttpPost(url);

//请求头 放置一些修改http请求头和cookie

httpPost.setHeader("Accept", "application/json");

......

//如果是HttpPost或者HttpPut请求需要在请求里加参数,而HttpGet或者HttpDelete请求则可以直接拼接到url字符串后面

//向HttpPost中加入参数

List<NameValuePair> values = new ArrayList<NameValuePair>();

values.add(new NameValuePair("id", "1"));

values.add(new NameValuePair("name", "xiaohong"));

httpPost.setEntity(new UrlEncodeFormEntity(values, HTTP.UTF_8));  //进行转码

//实例HttpClient 并执行带有HttpPost的方法,返回HttpResponse 响应,再进行操作

HttpClient httpClient = new DefaultHttpClient();

HttpResponse httpResponse = httpClient.execute(httpPost);

int statusCode = httpResponse.getStatusLine().getStatusCode();  //返回状态码 ,用来进行识别或者判断访问结果

if(statusCode == 200){

  Instream in = httpResponse.getEntity().getContent();  //要处理该数据流是否为GZIP流

}

示例代码如下:

package cn.dratek.haoyingsheng.manager.client;

import cn.dratek.haoyingsheng.manager.util.ResourceUtil;
import net.dratek.browser.http.Cookie;
import net.dratek.browser.http.CookieManager;
import net.dratek.browser.http.URL;
import org.apache.http.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class HttpNetClient {
/**
* 所有get 请求底层调用方法
*
* @param url 请求url
* @return byte[] response data
*/
public static byte[] doGet(String url) {
InputStream in;
byte[] bre = null;
HttpResponse response;
CookieManager manager = CookieManager.getInstance();
if (url != null && url.length() != 0) {
URL myURL = URL.parseString(url);
Cookie[] cookies = manager.getCookies(myURL);
HttpGet httpGet = new HttpGet(url);
if (cookies != null && cookies.length > 0) {
StringBuilder sb = new StringBuilder();
for (Cookie ck : cookies) {
sb.append(ck.name).append('=').append(ck.value).append(";");
}
String sck = sb.toString();
if (sck.length() > 0) {
httpGet.setHeader("Cookie", sck);
}

}
httpGet.setHeader("Accept-Encoding", "gzip, deflate");
httpGet.setHeader("Accept-Language", "zh-CN");
httpGet.setHeader("Accept", "application/json, application/xml, text/html, text/*, image/*, */*");
try {
response = new DefaultHttpClient().execute(httpGet);
if (response != null) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200 || statusCode == 403) {
Header[] headers = response.getHeaders("Set-Cookie");
if (headers != null && headers.length > 0) {
for (Header header : headers) {
manager.setCookie(myURL, header.getValue());
}
}
in = response.getEntity().getContent();
if (in != null) {
bre = ResourceUtil.readStream(in);
}

}
}

} catch (IOException e) {
e.printStackTrace();
}
}

return bre;

}

/**
* 所有Post 请求底层调用方法
*
* @param url 请求url
* @param values 传递的参数
* @return byte[] 返回数据 or null
*/
public static byte[] doPost(String url, List<NameValuePair> values) {
System.out.println("url = " + url);
byte[] bytes = null;
HttpResponse response;
InputStream inputStream = null;
CookieManager manager = CookieManager.getInstance();
if (url != null && url.length() != 0) {
URL myurl = URL.parseString(url);
Cookie[] cookies = manager.getCookies(myurl);
HttpPost post = new HttpPost(url);
if (cookies != null && cookies.length > 0) {
StringBuilder sb = new StringBuilder();
for (Cookie ck : cookies) {
sb.append(ck.name).append('=').append(ck.value).append(";");
}
String sck = sb.toString();
if (sck.length() > 0) {
post.setHeader("Cookie", sck);
}

}
post.setHeader("Accept-Encoding", "gzip, deflate");
post.setHeader("Accept-Language", "zh-CN");
post.setHeader("Accept", "application/json, application/xml, text/html, text/*, image/*, */*");
DefaultHttpClient client = new DefaultHttpClient();
try {
if (values != null && values.size() > 0) {
post.setEntity(new UrlEncodedFormEntity(values, HTTP.UTF_8));
}
response = client.execute(post);
if (response != null) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200 || statusCode == 403) {
Header[] headers = response.getHeaders("Set-Cookie");
if (headers != null && headers.length > 0) {
for (Header header : headers) {
manager.setCookie(myurl, header.getValue());
}
}
inputStream = response.getEntity().getContent();
}
}

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (inputStream != null) {
bytes = ResourceUtil.readStream(inputStream);
}
}
return bytes;
}

/**
* PUT基础请求
*
* @param url 请求地址
* @param values 提交参数
* @return byte[] 请求成功后的结果
*/
public static byte[] doPut(String url, List<NameValuePair> values) {
byte[] ret = null;

CookieManager manager = CookieManager.getInstance();
if (url != null && url.length() > 0) {
URL myUrl = URL.parseString(url);
StringBuilder sb = new StringBuilder();
Cookie[] cookies = manager.getCookies(myUrl);
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
sb.append(cookie.name).append("=").append(cookie.value).append(";");
}

}
HttpPut request = new HttpPut(url);
String sck = sb.toString();
if (sck.length() > 0) {
request.setHeader("Cookie", sck);
}
request.setHeader("Accept-Encoding", "gzip, deflate");
request.setHeader("Accept-Language", "zh-CN");
request.setHeader("Accept", "application/json, application/xml, text/html, text/*, image/*, */*");

DefaultHttpClient client = new DefaultHttpClient();
if (values != null && values.size() > 0) {
try {
UrlEncodedFormEntity entity;
entity = new UrlEncodedFormEntity(values);
request.setEntity(entity);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
try {
HttpResponse response = client.execute(request);
if (response != null) {
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200 || statusCode == 403) {
Header[] headers = response.getHeaders("Set-Cookie");
if (headers != null && headers.length > 0) {
for (Header header : headers) {
manager.setCookie(myUrl, header.getValue());
}
}
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
if (inputStream != null) {
ret = ResourceUtil.readStream(inputStream);
inputStream.close();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
return ret;
}

/**
* Delete基础请求
*
* @param url 请求地址
* @return 请求成功后的结果
*/
public static byte[] doDelete(String url) {

InputStream in;
byte[] bre = null;
HttpResponse response;
CookieManager manager = CookieManager.getInstance();
if (url != null && url.length() != 0) {
URL myurl = URL.parseString(url);
Cookie[] cookies = manager.getCookies(myurl);
HttpDelete delete = new HttpDelete(url);
if (cookies != null && cookies.length > 0) {
StringBuilder sb = new StringBuilder();
for (Cookie ck : cookies) {
sb.append(ck.name).append('=').append(ck.value).append(";");
}
String sck = sb.toString();
if (sck.length() > 0) {
delete.setHeader("Cookie", sck);
}

}
delete.setHeader("Accept-Encoding", "gzip, deflate");
delete.setHeader("Accept-Language", "zh-CN");
delete.setHeader("Accept", "application/json, application/xml, text/html, text/*, image/*, */*");
try {
response = new DefaultHttpClient().execute(delete);
if (response != null) {
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200 || statusCode == 403) {
Header[] headers = response.getHeaders("Set-Cookie");
if (headers != null && headers.length > 0) {
for (Header header : headers) {
manager.setCookie(myurl, header.getValue());
}
}
in = response.getEntity().getContent();
if (in != null) {
bre = ResourceUtil.readStream(in);
}

}
}

} catch (IOException e) {
e.printStackTrace();
}
}

return bre;
}

}


使用HttpClient进行http post/get方法的调用,以及使用dom4j解析xml

[java] view plain copy

import java.io.IOException;

import java.util.List;

import javax.servlet.ServletInputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpStatus;

import org.apache.commons.httpclient.NameValuePair;

import org.apache.commons.httpclient.methods.PostMethod;

import org.apache.commons.httpclient.params.HttpMethodParams;

import org.apache.commons.io.IOUtils;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import com.eecn.warehouse.api.model.Address;

import com.eecn.warehouse.api.model.User;

import com.eecn.warehouse.utils.FoodBase;

import com.frogsing.common.api.open.storage.hy.TCustomer;

import com.frogsing.common.open.tools.xmlUtils;

import com.google.common.collect.Lists;

import com.thoughtworks.xstream.XStream;

@Controller

@RequestMapping(value = {"/api"})

public class ApiAction {

private static Logger logger = LoggerFactory.getLogger(ApiAction.class);

public static final String SERVER_URL = "http://192.168.1.100/api/StorageApi";

@RequestMapping(value = {"/StorageApi"}, method = RequestMethod.POST)

public String storageApi(TCustomer model, HttpServletRequest request, HttpServletResponse response) throws DocumentException {

String xml = request.getParameter("xml");

String signature = request.getParameter("signature");

//************************http client*******************//

PostMethod postMethod = null;

try {

// 构造HttpClient的实例

HttpClient httpClient = new HttpClient();

// 设置连接超时

httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(10000);

// 设置字符集

httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");

// 创建POST方法的实例

postMethod = new PostMethod(SERVER_URL);

// 使用系统提供的默认的恢复策略 该策略在碰到IO异常的时候将自动重试3次。

postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 20000);

// 异常时,重试处理器

postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());

//参数

NameValuePair[] nameValuePairs = new NameValuePair[2];

nameValuePairs[0] = new NameValuePair("xml", xml);

nameValuePairs[1] = new NameValuePair("signature", signature);

// 将参数加入到请求方法中

postMethod.setRequestBody(nameValuePairs);

// 发送连接

int statusCode = httpClient.executeMethod(postMethod);

if (statusCode == HttpStatus.SC_OK) {

String result = postMethod.getResponseBodyAsString();

logger.info("返回数据1:" + result);

logger.info("字符集:" + postMethod.getResponseCharSet());

String rspXml = new String(postMethod.getResponseBody(), "UTF-8");

logger.info("返回数据2:" + rspXml);

Document document = DocumentHelper.parseText(rspXml);

Element signatureNode = (Element)document.selectSingleNode("//signature");

Element dataNode = (Element)document.selectSingleNode("//data");

String signXml = signatureNode.getText();

String dataXml = dataNode.getText();

String pureXml = FoodBase.decodeXml(dataXml);

request.setAttribute("pureXml", pureXml);

request.setAttribute("signXml", signXml);

}

} catch (Exception e) {

logger.error("http client invoke error.", e);

} finally {

if (postMethod != null) {

postMethod.releaseConnection();

}

}

//******************************************************//

ServletInputStream inputStream = null;

String rspXml = null;

try {

inputStream = request.getInputStream();

rspXml = IOUtils.toString(inputStream, "UTF-8");

} catch (IOException e) {

logger.error("读取交易仓单返回数据错误.", e);

}

return "api/storage";

}

@RequestMapping(value = {"/MarketApi"}, method = RequestMethod.POST)

public String marketApi(HttpServletRequest request, HttpServletResponse response) {

return "api/market";

}

public static void main(String[] args) {

XStream xstream = new XStream();

xstream.alias("User", User.class);

xstream.alias("Address", Address.class);

//xStream.aliasAttribute(User.class, "name", "name");

xstream.useAttributeFor(User.class, "name");

List<Address> addressList = Lists.newArrayList();

for (int i = 0; i < 3; i++) {

Address address = new Address();

address.setProvince("浙江");

addressList.add(address);

}

User user = new User();

user.setAddressList(addressList);

user.setAccount("asddaa");

user.setAge(23);

user.setGender(0);

user.setName("zhang");

System.out.println(xstream.toXML(user));

System.out.println(xmlUtils.toEntityXml(user));

}

}

get方法类似。

1、httpclient4.3.4 读取网页内容

特别说明:StreamUtils 只是做了简单的关闭流操作,这个类可有自己写,或者直接调用流关闭操作 谢谢

[java] view plain copy

print?





package com.haokuaisheng.https;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import java.util.Arrays;

import java.util.List;

import org.apache.http.Consts;

import org.apache.http.Header;

import org.apache.http.HttpEntity;

import org.apache.http.NameValuePair;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

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.BasicHeader;

import com.haokuaisheng.log.LogManager;

import com.haokuaisheng.utils.StreamUtils;

public class HttpUtils {

final static Header HEADER_USER_AGENT = new BasicHeader( "user-agent" , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2700.0 Safari/537.36");

final static Header HEADER_CONNECTION = new BasicHeader( "connection" , "keep-alive");

final static Header HEADER_CACHE_CONTROL = new BasicHeader( "cache-control" , "max-age=0");

final static Header HEADER_ACCEPT = new BasicHeader( "accept" , "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");

final static Header HEADER_ACCEPT_ENCODING = new BasicHeader( "accept-encoding" , "gzip, deflate, sdch");

final static Header HEADER_ACCEPT_LANGUAGE = new BasicHeader( "accept-language" , "zh-CN,zh;q=0.8,en;q=0.6");

/**

* 发送get请求

* @param url 请求的url链接

* @param charSet该链接字符编码

* */

public static String requestGet(String url , String charSet , NameValuePair...nameValuePairs){

CloseableHttpClient httpclient = HttpClients.createDefault();

CloseableHttpResponse response = null ;

try {

HttpGet httpget = new HttpGet( url );

httpget.setHeader( HEADER_USER_AGENT ) ;

httpget.setHeader( HEADER_CONNECTION ) ;

httpget.setHeader( HEADER_CACHE_CONTROL ) ;

httpget.setHeader( HEADER_ACCEPT ) ;

httpget.setHeader( HEADER_ACCEPT_ENCODING);

httpget.setHeader( HEADER_ACCEPT_LANGUAGE);

response = httpclient.execute( httpget ) ;

if(response.getStatusLine().getStatusCode() == 200){

HttpEntity entity = response.getEntity() ;

return inputStreamToString( entity , charSet );

}

} catch (Exception e) {

LogManager.err("requestGet:" + url , e) ;

}finally{

try {

response.close();

httpclient.close();

} catch (Exception e) {

}

}

return "" ;

}

/**

* 发送post请求

* @param url 请求的url链接

* @param charSet该链接字符编码

* */

public static String requestPost(String url , String charSet , NameValuePair...nameValuePairs){

CloseableHttpClient httpclient = HttpClients.createDefault();

CloseableHttpResponse response = null ;

try {

HttpPost httpPost = new HttpPost( url );

httpPost.setHeader( HEADER_USER_AGENT ) ;

httpPost.setHeader( HEADER_CONNECTION ) ;

httpPost.setHeader( HEADER_CACHE_CONTROL ) ;

httpPost.setHeader( HEADER_ACCEPT ) ;

httpPost.setHeader( HEADER_ACCEPT_ENCODING);

httpPost.setHeader( HEADER_ACCEPT_LANGUAGE);

List<namevaluepair> formparams = Arrays.asList( nameValuePairs );

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);

httpPost.setEntity( formEntity ) ;

response = httpclient.execute( httpPost ) ;

if(response.getStatusLine().getStatusCode() == 200){

HttpEntity entity = response.getEntity() ;

return inputStreamToString( entity , charSet );

}

} catch (Exception e) {

LogManager.err("requestPost:" + url , e) ;

}finally{

try {

response.close();

httpclient.close();

} catch (Exception e) {

}

}

return "" ;

}

private static String inputStreamToString(HttpEntity entity , String charSet)

throws Exception{

InputStream is = null ;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

try {

is = entity.getContent() ;

byte[]bytes = new byte[52428800] ;

int buffer = -1;

while( (buffer = is.read(bytes)) != -1){

baos.write(bytes, 0, buffer) ;

}

return new String(baos.toByteArray() , charSet ) ;

}finally{

StreamUtils.closeInput( is );

StreamUtils.closeOutput( baos );

}

}

public static void main(String[] args) {

//String result = requestGet("http://127.0.0.1:8080/a/?age=19" , "UTF-8" );

//LogManager.info("\n" + result.replace("

", "\n"));

String result = requestGet("http://neihanshequ.com/" , "UTF-8" );

LogManager.info("\n" + result.replace("

", "\n"));

/*

String result = requestPost("http://127.0.0.1:8080/a/" , "UTF-8" , new BasicNameValuePair("name" , "中文中文中文")

, new BasicNameValuePair("age" , "19") );

LogManager.info(result.replace("

", "\n"));*/

}

}

</namevaluepair>

采用jsoup-1.7.2. 和webmagic-core-0.5.2 jin

[java] view plain copy

print?





package com.haokuaisheng.https;

import java.util.List;

import com.haokuaisheng.log.LogManager;

import us.codecraft.webmagic.selector.Html;

public class XPathUtils {

public static void main(String[] args) throws Exception {

String htmlStr = HttpUtils.requestGet("http://neihanshequ.com/", "UTF-8");

Html html = new Html( htmlStr ) ;

//List<String> titles = html.xpath( "//div[@class='post_item_body']/h3/a/text()" ).all() ;

List<String> titles = html.xpath( "//span[@class='name']/text()" ).all() ;

//List<String> bodys = html.xpath( "//div[@class='post_item_body']/p[@class='post_item_summary']/text()" ).all() ;

List<String> bodys = html.xpath( "//h1[@class='title']/p/html()" ).all() ;

int size = titles.size();

for(int x=0; x<size; x++ ){

String title = titles.get( x ) ;

String body = bodys.get( x );

LogManager.info("\n" + title + "-->" + body) ;

}

}

其它更深入:

http://www.th7.cn/Program/java/201605/859929.shtml

http://www.tuicool.com/articles/Unumeu

http://blog.csdn.net/binsweet/article/details/5861427

http://blog.csdn.net/csdnbsd/article/details/51850826

http://blog.csdn.net/kl28978113/article/details/51997201

http://blog.csdn.net/kl28978113/article/details/51997201
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐