前阵子需要做新浪微博模拟登录的例子。最后终于使用httpclient模拟请求做出来了。现在先简单总结下下怎么使用httpclient的4.x版本来模拟get请求。
如果你之前用过httpclient,那你可能会知道httpclient3.x和httpclient4.x版本的改动可是非常大的。连定义httpclient的方式都变了。我还真的是比较吃惊。因为这样改变的例子还真少见。
下面直接贴代码:
package pre.sinalogin; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class httpclientTest { public static void main(String[] args) { CloseableHttpClient client = HttpClients.createDefault(); String html = ""; String url = "https://www.douban.com/group/explore"; // 依次是代理地址,代理端口号,协议类型。如果你的电脑不需要代理,可以去掉 HttpHost proxy = new HttpHost("132.121.3.61", 8080, "http"); RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); HttpGet httpGet = new HttpGet(url); httpGet.setConfig(config); //设置了headers的参数,如果请求的对这里不要求的话,可以省略。 Map headers = new HashMap(); //headers.put("Cookie", cookie); headers.put("Accept", "*/*"); headers.put("Accept-Encoding", "gzip, deflate, sdch"); headers.put("Accept-Language", "zh-CN,zh;q=0.8"); for (Map.Entry m : headers.entrySet()) { System.out.println(m.getKey() + "\t" + m.getValue()); httpGet.setHeader(m.getKey(), m.getValue()); } CloseableHttpResponse response = null; try { response = client.execute(httpGet); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } HttpEntity httpEntity = response.getEntity(); if (httpEntity != null) { // 打印响应内容 try { html = EntityUtils.toString(httpEntity, "UTF-8"); client.close(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.print(html); } }
如果有什么疑问,欢迎留言讨论