HTTP-GET和HTTP-POST定义:
都是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语义。
每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,
而响应则是由一系列HTTP请求数据和响应数据组成,如果请求成功则返回响应的数据。
Ø HTTP-GET以使用MIME类型application/x-www-form-urlencoded的urlencoded文本的格式传递参数。
Urlencoding是一种字符编码,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。附加参数还能被认为是一个查询字符串。
Ø与HTTP-GET类似,HTTP-POST参数也是被URL编码的。然而,变量名/变量值不作为URL的一部分被传送,而是放在实际的HTTP请求消息内部被传送。
GET和POST之间的主要区别:
1、GET是从服务器上获取数据,POST是向服务器传送数据。
2、在客户端, GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交
3、对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
4、GET方式提交的数据最多只能有1024字节,而POST则没有此限制
5、安全性问题。正如在(2)中提到,使用 GET 的时候,参数会显示在地址栏上,而 POST 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 GET ;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 POST为好
Java中进行HTTP编程有如下的两种方式:标准的Java接口和标准Apache接口
标准的Java接口 两个案例(GET和POST)
案例1:以Java接口GET方式从服务器获得一张图片下载到本地磁盘
首次得导入相关第三方的包
 

源码:

 package com.http.get;

 import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; public class HttpUtils { private static String urlPath="http://i6.topit.me/6/5d/45/1131907198420455d6o.jpg";
private static HttpURLConnection httpURLConnection=null;
public HttpUtils() {
// TODO Auto-generated constructor stub
}
public static InputStream getInputStream() throws IOException{
InputStream inputStream=null;
URL url=new URL(urlPath);
if(url!=null){
httpURLConnection=(HttpURLConnection)url.openConnection();
httpURLConnection.setConnectTimeout();
httpURLConnection.setDoInput(true);
httpURLConnection.setRequestMethod("GET");
int code=httpURLConnection.getResponseCode();
if(code==){
inputStream=httpURLConnection.getInputStream();
}
}
return inputStream;
}
public static void getImgToDisk() throws IOException{
InputStream inputStream=getInputStream();
FileOutputStream fileOutputStream=new FileOutputStream("D:\\TEST.png");
byte[] data=new byte[];
int len=;
while((len=inputStream.read(data))!=-){
fileOutputStream.write(data, , len);
}
if(inputStream!=null)
inputStream.close();
if(fileOutputStream!=null)
fileOutputStream.close();
}
public static void main(String[] args) throws IOException {
getImgToDisk();
}
}

案例2:以Java接口POST方式向服务器提交用户名和密码,在服务器端进行简单判断,如果正确返回字符串success,否则返回fail

服务器端简单校验:

  */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter();
//String jsonString =JsonTools.createJsonString("person", service.getPerson());
String name = request.getParameter("username");
String pwd = request.getParameter("password");
if (name.equals("admin")&&pwd.equals("")) {
out.print("success");
}
else {
out.print("fail");
}
out.flush();
out.close();
}

客户端的提交:

 package com.http.post;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map; import sun.net.www.http.HttpClient; public class HttpUtils { private static String PATH="http://122.206.79.193:8080/myhttp/servlet/LoginAction";
private static URL URL;
static{
try {
URL=new URL(PATH);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public HttpUtils() {
// TODO Auto-generated constructor stub
} /**
*
* @param params 填写的参数
* @param encode 字节编码 为了避免乱码
* @return 从服务端返回的信息
* @throws Exception
*/
public static String sendPostMessage(Map<String,String>params,String encode) throws Exception{
StringBuffer sb=new StringBuffer();
if(params!=null&&!params.isEmpty()){
for(Map.Entry<String,String> entry:params.entrySet()){
sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(),encode)).append("&");
}
sb.deleteCharAt(sb.length()-);
HttpURLConnection httpURLConnection=(HttpURLConnection)URL.openConnection();
httpURLConnection.setConnectTimeout();
httpURLConnection.setDoInput(true);//从服务器获取数据
httpURLConnection.setDoOutput(true);//向服务器提交数据
//获得上传信息字节大小及长度
byte[] data=sb.toString().getBytes();
//浏览器内置封装了http协议信息,但是手机或者用Java访问时并没有 所以最重要的是需要设置请求体的属性封装http协议
//设置请求体的请求类型是文本类型
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//文本类型
//设置请求体的长度
httpURLConnection.setRequestProperty("Content-Length",String.valueOf(data.length));
//想要向服务器提交数据必须设置输出流,向服务器输出数据
System.out.println(httpURLConnection.toString());
OutputStream out=httpURLConnection.getOutputStream();
out.write(data, , data.length);
out.close();
int code=httpURLConnection.getResponseCode();
if(code==){
return changeInputStream(httpURLConnection.getInputStream(),encode);
} }
return "";
}
private static String changeInputStream(InputStream inputStream,String encode) {
// TODO Auto-generated method stub
String resString = "";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//内存流
int len = ;
byte[] data = new byte[];
try {
while ((len = inputStream.read(data)) != -) {
outputStream.write(data, , len);
}
resString = new String(outputStream.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resString;
}
public static void main(String[] args) throws Exception {
Map<String,String>params=new HashMap<String, String>();
params.put("username", "admin");
params.put("password", "");
String res=sendPostMessage(params,"utf-8");
System.out.println("-res->>"+res);
}
}

标准Apache接口

 package com.http.post;

 import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair; public class HttpUtils { public HttpUtils() {
// TODO Auto-generated constructor stub
}
public static String sendHttpClientPost(String path,Map<String,String>map,String encode) throws Exception, IOException{ //将参数map进行封装到list中
List<NameValuePair> list=new ArrayList<NameValuePair>();
if(map!=null&&!map.isEmpty()){
for(Map.Entry<String, String> entry:map.entrySet()){
list.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
try {
//将请求的参数封装的list到表单,即请求体中
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(list,encode);
//使用post方式提交数据
HttpPost httpPost=new HttpPost(path);
httpPost.setEntity(entity);
DefaultHttpClient client=new DefaultHttpClient();
HttpResponse response= client.execute(httpPost);
//以上完成提交
//以下完成读取服务端返回的信息
if(response.getStatusLine().getStatusCode()==){
return changeInputStream(response.getEntity().getContent(),encode);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
public static String changeInputStream(InputStream inputStream,String encode) {
// TODO Auto-generated method stub
String resString = "";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();//内存流
int len = ;
byte[] data = new byte[];
try {
while ((len = inputStream.read(data)) != -) {
outputStream.write(data, , len);
}
resString = new String(outputStream.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resString;
}
public static void main(String[] args) throws Exception, Exception {
String path="http://localhost:8080/myhttp/servlet/LoginAction";
Map<String,String>map=new HashMap<String, String>();
map.put("username", "admin");
map.put("password", "");
String msg=HttpUtils.sendHttpClientPost(path, map, "utf-8");
System.out.println("-->>--"+msg);
} }

Android 之http编程的更多相关文章

  1. Android中JNI编程的那些事儿(1)

    转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...

  2. Android 框架式编程 —— 起篇

    一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...

  3. Android 的网络编程

    android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ...

  4. Android手机摄像头编程入门

    本讲内容:Android手机摄像头编程入门智能手机中的摄像头和普通手机中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制, 做一些有趣的应用譬如,画中画,做一些有用的应用譬如二维码识别, ...

  5. 《Android传感器高级编程》

    <Android传感器高级编程> 基本信息 原书名:Professional Android Sensor Programming 原出版社: Wrox 作者: (美)米内特(Greg M ...

  6. (转载)android开发常见编程错误总结

    首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07  第771次阅读 android,异常 0 编辑推荐:稀 ...

  7. Android Studio NDK编程初探

    继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了. 经过参考和一系列的摸索,记录下具体步骤. 创建C++ Support的Android St ...

  8. (转)android 蓝牙通信编程

    转自:http://blog.csdn.net/pwei007/article/details/6015907 Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样 ...

  9. Android BLE 蓝牙编程(三)

    上节我们已经可以连接上蓝牙设备了. 本节我们就要获取手环的电池电量和计步啦. 在介绍这个之前我们需要先了解下什么是 服务 什么是 UUID 我们记得上节中我们item监听事件的回调的返回值是Bluet ...

  10. Android first --- 网络编程

    网络编程 ###图片下载查看 1.发送http请求 URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (Htt ...

随机推荐

  1. MySQL Linux压缩版安装方法

    在诸多开源数据库中,MySQL是目前应用行业,特别是互联网行业发展最好的一个.借助灵活的架构特点和适应不同应用系统场景的Storage Engine,MySQL在很多方面已经有不次于传统商用数据库的表 ...

  2. WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  3. SQL查询每个部门工资前三名的员工信息

    --通用sql select deptno, ename, sal from emp e1 where ( ) from emp e2 where e2.deptno=e1.deptno and e2 ...

  4. asp.net MVC  Ajax.BeginForm 异步上传图片的问题

    当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或 Request.Files[0] 都不会取到文件流. 这就是我要说的,当使用Ajax.Be ...

  5. 以打印日志为荣之logging模块详细使用

    啄木鸟社区里的Pythonic八荣八耻有一条: 以打印日志为荣 , 以单步跟踪为耻; 很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误.警告等信息输出,python ...

  6. lsnrctl start 命令未找到 数据库连接报错“ORA-12541: TNS: 无监听程序”

    1. lsnrctl start 命令未找到 或者bash:lsnrctl:command not found. su - oralce        切换用户的时候,中间要有-,而且-的两边有空格, ...

  7. mapper.xml是怎样实现Dao层接口

    上午写了一个简单的 从xml读取信息实例化一个Bean对象.下午就开始想mybatis是怎么通过xml文件来实现dao层接口的,一开始想直接用Class.forName(String name)然后调 ...

  8. .net core 2.0 登陆权限验证

    首先在Startup的ConfigureServices方法添加一段权限代码 services.AddAuthentication(x=> { x.DefaultAuthenticateSche ...

  9. [2017-08-16]ABP系列——QuickStartB:正确理解Abp解决方案的代码组织方式、分层和命名空间

    本系列目录:Abp介绍和经验分享-目录 介绍ABP的文章,大多会提到ABP框架吸收了很多最佳实践,比如: 1.N层 (复用一下上篇的图) 展现层(Personball.Demo.Web):asp.ne ...

  10. [2012-06-18]awk利用关联数组合并记录

    问题源起:http://bbs.chinaunix.net/thread-3753784-1-1.html 代码如下 {% capture text %} $awk '{if(!a[$1]){a[$1 ...