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

用Java模拟Http请求

2013-07-01 17:13 246 查看
1),利用httpclient4.× 写一个http的客户端,模拟浏览器请求,
public void post(List<NameValuePair> payload) throws  Exception{
HttpPost post = new HttpPost(uri);
HttpEntity result = null;
try {
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(payload,
charset);
post.setEntity(entity);
if (LOG.isDebugEnabled()) {
LOG.debug("sending:" + payload);
}

HttpResponse response = _httpClient.execute(post);
StatusLine statusLine = response.getStatusLine();
if (statusLine.getStatusCode() != HttpStatus.SC_OK) {
result = response.getEntity();
StringBuilder msg = new StringBuilder();
msg.append("http response with code "
+ statusLine.getStatusCode());
msg.append("\n");
msg.append("post request: " + post.getURI());
msg.append("\n");
msg.append(statusLine.getReasonPhrase());
if (result != null) {
msg.append("\n\n");
msg.append(EntityUtils.toString(result, "UTF-8"));
msg.append("\n\n");
}
throw new UmcException(msg.toString());
}
if (response.getEntity() != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
if (line.indexOf("success") < 0)
System.out.println(line);
}
}
} finally {
if (result != null)
try {
EntityUtils.consume(result);
} catch (IOException e) {
}
post.abort();
}
}


uri是请求的地址,charset是编码“UTF-8”,List<NameValuePair>就是表单参数集
ClientConnectionManager     ccManager = new ThreadSafeClientConnManager();
HttpClient      _httpClient = new DefaultHttpClient(ccManager);


2) 采用JDK的HttpConnection构造http客户端,
////发送
HttpURLConnection conn = null;
try {
URL url = new URL(Your_URL);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
conn.setUseCaches(false);
conn.setDoOutput(true);
OutputStreamWriter osw = new OutputStreamWriter(
conn.getOutputStream());
StringBuffer sb = new StringBuffer();
addPair(sb, "p1", "p1value");
addPair(sb, "p2", "p2value");
osw.write(sb.substring(0, sb.length() - 1));
osw.flush();
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line = null;
sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
line = sb.toString();
// 处理返回的字符串line
return;
////
} catch (IOException e) {
// handle e
} finally {
if (conn != null)
conn.disconnect();
}///发送结束

addPair方法:
public static void addPair(StringBuffer sb, String name, String value) {
if (value == null) {
return;
}
sb.append(name);
sb.append("=");
sb.append(value);
sb.append("&");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: