1、采用URLConnection(POST)
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new PrintWriter(conn.getOutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
2、使用HttpURLConnection(POST)
public static String postTo(String strURL, String params) {
try {
URL url = new URL(strURL);// 创建连接
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestMethod("POST"); // 设置请求方式
connection.setRequestProperty("Accept", "application/text"); // 设置接收数据的格式
connection.setRequestProperty("Content-Type", "application/text"); // 设置发送数据的格式
connection.connect();
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "GBK"); // utf-8编码
out.append(params);
out.flush();
out.close();
// 读取响应
int length = (int) connection.getContentLength();// 获取长度
InputStream is = connection.getInputStream();
if (length != -1) {
byte[] data = new byte[length];
byte[] temp = new byte[512];
int readLen = 0;
int destPos = 0;
while ((readLen = is.read(temp)) > 0) {
System.arraycopy(temp, 0, data, destPos, readLen);
destPos += readLen;
}
String result = new String(data, "GBK"); // utf-8编码
System.out.println(result);
return result;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "error"; // 自定义错误信息
}
3、使用HTTPClient(POST), 其中参数为键值对,返回值为字节数组。
@SuppressWarnings("unchecked")
public static byte[] doHttpRequest(String host, Map<String, String> params)
throws IOException {
byte[] bt = null;
Map<String, String> map = null == params ? new HashMap<String, String>()
: params;
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(host);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = (Entry<String, String>) it.next();
nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
httpost.setEntity(new UrlEncodedFormEntity(nvps, "GBK"));
HttpResponse response = httpclient.execute(httpost);
if (200 != response.getStatusLine().getStatusCode()) {
throw new RuntimeException("http返回状态"
+ response.getStatusLine().getStatusCode());
}
InputStream in = response.getEntity().getContent();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int temp;
byte[] buf = new byte[1024];
while ((temp = in.read(buf, 0, buf.length)) != -1) {
bos.write(buf, 0, temp);
}
bt = bos.toByteArray();
return bt;
}
4、httpclient get请求,返回为String
public static String getHttpRequestContent(String serialUrl, String encode)
throws ClientProtocolException, IOException {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(serialUrl);
HttpResponse response = httpclient.execute(httpGet);
if (200 != response.getStatusLine().getStatusCode()) {
throw new RuntimeException("http返回状态"
+ response.getStatusLine().getStatusCode());
}
HttpEntity entity = response.getEntity();
InputStreamReader in = new InputStreamReader(entity.getContent(),
encode == null ? HTTP.UTF_8 : encode);
BufferedReader reader = new BufferedReader(in);
String line = null;
String content = "";
while (null != (line = reader.readLine())) {
content += line;
}
in.close();
reader.close();
httpclient.getConnectionManager().shutdown();
return content;
}