前陣子需要做新浪微網誌模拟登入的例子。最後終于使用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);
}
}
如果有什麼疑問,歡迎留言讨論