Java 代码实现Http 的GET和POST 请求
先来个传统的,不过这个里面有些类已经标明 deprecated,所以之后还有更好的方法,起码没有被标明 deprecated的类和方法。
前两个方法是有deprecated的情况。后面用HttpURLConnection 对象的是没有deprecated的。最后还有个设置代理的方法。就是设置代理了,HttpUrlConnection对象也可以通过 usingProxy 方法判断是否使用代理了。
/**
* 工具包
*/
package utils; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils; import android.net.Uri;
import android.util.Log;
import android.view.ViewDebug.FlagToString; /**
* 和Htttp相关的类
*
* @author Administrator
*
*/
public class HttpUtils {
private static final int HTTP_STATUS_OK = 200; /**
* 通过post协议发送请求,并获取返回的响应结果
*
* @param url
* 请求url
* @param params
* post传递的参数
* @param encoding
* 编码格式
* @return 返回服务器响应结果
* @throws HttpException
*/
public static String sendPostMethod(String url, Map<String, Object> params,
String encoding) throws Exception {
String result = ""; HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url); // 封装表单
if (null != params && !params.isEmpty()) {
List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
for (Map.Entry<String, Object> entry : params.entrySet()) {
String name = entry.getKey();
String value = entry.getValue().toString();
BasicNameValuePair pair = new BasicNameValuePair(name, value);
parameters.add(pair);
} try {
// 此处为了避免中文乱码,保险起见要加上编码格式
UrlEncodedFormEntity encodedFormEntity = new UrlEncodedFormEntity(
parameters, encoding);
post.setEntity(encodedFormEntity);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
Log.d("shang", "UnsupportedEncodingException");
}
}
try {
HttpResponse response = client.execute(post);
if (HTTP_STATUS_OK == response.getStatusLine().getStatusCode()) {
// 获取服务器请求的返回结果,注意此处为了保险要加上编码格式
result = EntityUtils.toString(response.getEntity(), encoding);
} else {
throw new Exception("Invalide response from API"
+ response.toString());
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
} /**
* 通过get方式发送请求,并返回响应结果
*
* @param url
* 请求地址
* @param params
* 参数列表,例如name=小明&age=8里面的中文要经过Uri.encode编码
* @param encoding
* 编码格式
* @return 服务器响应结果
* @throws Exception
*/
public static String sendGetMethod(String url, String params,
String encoding) throws Exception {
String result = "";
url += ((-1 == url.indexOf("?")) ? "?" : "&") + params; HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
get.setHeader("charset", encoding); try {
HttpResponse response = client.execute(get);
if (HTTP_STATUS_OK == response.getStatusLine().getStatusCode()) {
result = EntityUtils.toString(response.getEntity(), encoding);
} else {
throw new Exception("Invalide response from Api!"
+ response.toString());
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
} /**
* 通过URLConnect的方式发送post请求,并返回响应结果
*
* @param url
* 请求地址
* @param params
* 参数列表,例如name=小明&age=8里面的中文要经过Uri.encode编码
* @param encoding
* 编码格式
* @return 服务器响应结果
*/
public static String sendPostMethod(String url, String params,
String encoding) {
String result = "";
PrintWriter out = null;
BufferedReader in = null; try {
URL realUrl = new URL(url);
// 打开url连接
HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection();
// 5秒后超时
conn.setConnectTimeout(5000); // 设置通用的属性
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);
// post请求不应该使用cache
conn.setUseCaches(false); //显式地设置为POST,默认为GET
conn.setRequestMethod("POST");
// 获取Urlconnection对象的输出流,调用conn.getOutputStream的时候就会设置为POST方法
out = new PrintWriter(conn.getOutputStream());
// 发送参数
out.print(params);
// flush输出流的缓冲,这样参数才能发送出去
out.flush(); // 读取流里的内容,注意编码问题
in = new BufferedReader(new InputStreamReader(
conn.getInputStream(), encoding)); String line = "";
while (null != (line = in.readLine())) {
result += line;
} } catch (IOException e) {
System.out.println("Send post Exection!");
e.printStackTrace();
} finally {
// 关闭流
try {
if (null != out) {
out.close();
}
if (null != in) {
in.close();
}
} catch (Exception e) {
e.printStackTrace();
}
} return result;
} /**
* 采用URLConnection的方式发送get请求
*
* @param url
* 请求地址
* @param params
* 参数列表,例如name=小明&age=8里面的中文要经过Uri.encode编码
* @param encoding
* 编码格式
* @return 服务器响应结果
*/
public static String sendGetRequest(String url, String params,
String encoding) {
String result = "";
BufferedReader in = null; // 连接上参数
url += ((-1 == url.indexOf("?")) ? "?" : "&") + params; try {
URL realUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection(); // 通用设置
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (comptibal; MSIE 6.0; Windows NT 5.1;SV1 )"); // 不使用缓存
conn.setUseCaches(false); // 建立链接
conn.connect(); // 获取所有头字段
Map<String, List<String>> headers = conn.getHeaderFields();
for (String key : headers.keySet()) {
List<String> value = headers.get(key);
Log.d("shang", "key=>" + value.toString());
} in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while (null != (line = in.readLine())) {
result += line;
}
} catch (IOException e) {
Log.d("shang", "Send get Exception!");
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
Log.d("shang", "BufferReader close Exception!");
e.printStackTrace();
}
}
} return result;
} /**
* 设置代理
*
* @param ip
* 代理ip
* @param port
* 代理端口号
*/
public static void setProxy(String ip, String port) {
// 如果不设置,只要代理IP和代理端口正确,此项不设置也可以
System.getProperties().setProperty("http.proxyHost", ip);
System.getProperties().setProperty("http.proxyPort", port);
}
}
Java 代码实现Http 的GET和POST 请求的更多相关文章
- 通过java代码HttpRequestUtil(服务器端)发送HTTP请求并解析
关键代码:String jsonStr = HttpRequestUtil.sendGet(config.getAddress() + config.getPorts() + config.getFi ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 怎样编写高质量的java代码
代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友 ...
- 数据结构笔记--二叉查找树概述以及java代码实现
一些概念: 二叉查找树的重要性质:对于树中的每一个节点X,它的左子树任一节点的值均小于X,右子树上任意节点的值均大于X. 二叉查找树是java的TreeSet和TreeMap类实现的基础. 由于树的递 ...
- java代码的初始化过程研究
刚刚在ITeye上看到一篇关于java代码初始化的文章,看到代码我试着推理了下结果,虽然是大学时代学的知识了,没想到还能做对.(看来自己大学时掌握的基础还算不错,(*^__^*) 嘻嘻……)但 ...
- JDBC——Java代码与数据库链接的桥梁
常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:j ...
- 利用Java代码在某些时刻创建Spring上下文
上一篇中,描述了如何使用Spring隐式的创建bean,但当我们需要引进第三方类库添加到我们的逻辑上时,@Conponent与@Autowired是无法添加到类上的,这时,自动装配便不适用了,我们需要 ...
- lombok 简化java代码注解
lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索"lombok plug ...
- 远程debug调试java代码
远程debug调试java代码 日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试.生产环境由于网络隔离和系统稳定性考虑,不能进行远程代码调试. 整体过程是通过修改远程服务JAV ...
随机推荐
- Eclipse上Hadoop插件中Run On Hadoop原理[转]
通过Eclipse的hadoop插件中的"run on hadoop"命令的原理:它不是把jar包发送到hadoop集群上去运行,而只是使用了hadoop集群上的hdfs,从hdf ...
- 怎么使用Less/Sass编译工具koala
怎么使用Less/Sass编译工具koala 如何使用Less/Sass编译工具koala 一.SASS调试插件的方法 如需调试功能,请在编译输出的时候输出debug信息,那样解析的css文件中就会包 ...
- Tablespace for table '`pomelo`.`bag`' exists. Please DISCARD the tablespace before IMPORT.
//遇到的问题是,删除数据库之后,重新创建数据库,在创建数据库表的时候,明明没有该表,却提示存在这个表.这是数据库缓存造成的 //解决方法 FLUSH TABLES; /* 安装MySql数据库(略) ...
- [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...
- PHP——注册页面,审核页面,登录页面:加Session和Cookie
实现效果: 用户注册信息,管理员核对信息审核通过后,可实现注册的用户名和密码的成功登陆,利用session和cookie获取用户信息并且不能跳过登录页面直接进入主页面 1.Session存储在服务器可 ...
- Js常用插件介绍
*各种JS功能介绍 1.zDialog.js 各种弹窗插件详细案例:http://www.2ky.cn/Pri_upfile/txdemo/0811/zDialog/zDialogDemo.html ...
- spring boot的@RequestParam和@RequestBody的区别
一.问题描述 由于项目是前后端分离,因此后台使用的是spring boot,做成微服务,只暴露接口.接口设计风格为restful的风格,在get请求下,后台接收参数的注解为RequestBody时会报 ...
- yum 安装 influxdb/telegraf
环境:centos 7 参考官网教程:http://docs.influxdata.com/telegraf/v1.9/introduction/installation/ 添加 yum 源: vim ...
- 【python】NLTK好文
From:http://m.blog.csdn.net/blog/huyoo/12188573 nltk是一个python工具包, 用来处理和自然语言处理相关的东西. 包括分词(tokenize), ...
- 用css制作星级评分
Step 1: XHTML <ul class="star-rating"> <li><a href="#" titl ...