最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
在Java中可以使用HttpURLConnection发起这两种请求,了解此类,对于了解soap,和编写servlet的自动测试代码都有很大的帮助。
下面的代码简单描述了如何使用HttpURLConnection发起这两种请求,以及传递参数的方法:
package com.android.httpurl;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class HttpURLConActivity extends Activity {
final String URL = "http://122.224.144.102:8080/publicback/httpurl?par=ylx";
final String URL_Post = "http://122.224.144.102:8080/publicback/httpurl";
private Button submit;
private TextView result;
String resultData="";
URL url = null;
HttpURLConnection urlConn = null;
boolean isPost = true;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
submit = (Button) this.findViewById(R.id.submit);
result = (TextView) this.findViewById(R.id.result);
submit.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
HttpURL();
}
});
}
private void HttpURLConnection_Get(){
try{
isPost = false;
//通过openConnection 连接
URL url = new java.net.URL(URL);
urlConn=(HttpURLConnection)url.openConnection();
//设置输入和输出流
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
//关闭连接
urlConn.disconnect();
}catch(Exception e){
resultData = "连接超时";
Message mg = Message.obtain();
mg.obj = resultData;
handler.sendMessage(mg);
e.printStackTrace();
}
}
private void HttpURLConnection_Post(){
try{
//通过openConnection 连接
URL url = new java.net.URL(URL_Post);
urlConn=(HttpURLConnection)url.openConnection();
//设置输入和输出流
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
urlConn.setRequestMethod("POST");
urlConn.setUseCaches(false);
// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
// 要注意的是connection.getOutputStream会隐含的进行connect。
urlConn.connect();
//DataOutputStream流
DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());
//要上传的参数
String content = "par=" + URLEncoder.encode("ylx_Post+中正", "UTF_8");
//将要上传的内容写入流中
out.writeBytes(content);
//刷新、关闭
out.flush();
out.close();
}catch(Exception e){
resultData = "连接超时";
Message mg = Message.obtain();
mg.obj = resultData;
handler.sendMessage(mg);
e.printStackTrace();
}
}
private void HttpURL() {
new Thread(){
public void run() {
try{
//Get方式
//HttpURLConnection_Get();
//Post方式
HttpURLConnection_Post();
InputStreamReader in = new InputStreamReader(urlConn.getInputStream());
BufferedReader buffer = new BufferedReader(in);
String inputLine = null;
while (((inputLine = buffer.readLine()) != null)){
resultData += inputLine + "\n";
}
System.out.println(resultData);
in.close();
}catch(Exception e){
resultData = "连接超时";
e.printStackTrace();
}finally{
try{
//关闭连接
if(isPost)
urlConn.disconnect();
Message mg = Message.obtain();
mg.obj = resultData;
handler.sendMessage(mg);
}catch(Exception e){
e.printStackTrace();
}
}
}
}.start();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String m = (String) msg.obj;
result.setText(m);
}
};
}
HttpURLConnection.connect函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是post还是get,http请求实际上直到HttpURLConnection.getInputStream()这个函数里面才正式发送出去。
对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。而对outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的。
http请求实际上由两部分组成,一个是http头,所有关于此次http请求的配置都在http头里面定义,一个是正文content,在connect()函数里面,会根据HttpURLConnection对象的配置值生成http头,因此在调用connect函数之前,就必须把所有的配置准备好。
紧接着http头的是http请求的正文,正文的内容通过outputStream写入,实际上outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络,而是在流关闭后,根据输入的内容生成http正文。
至此,http请求的东西已经准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后返回一个输入流,用于读取服务器对于此次http请求的返回信息。由于http请求在getInputStream的时候已经发送出去了(包括http头和正文),因此在getInputStream()函数之后对connection对象进行设置(对http头的信息进行修改)或者写入outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。
完成的android 在附件里面。 2.1的版本
分享到:
相关推荐
里面详细的写了post和get和HttpPost和HttpGet请求
小编刚刚用HttpURLConnection做了一个android的APP,不小心踩到了几个坑,总结下最常用的就通过HttpURLConnection来POST提交JSON数据与GET请求JSON数据。此外就是下载图片,下载图片分为显示进度与不显示进度两种。...
这是一个关于httpurlconnection 的网络post get 图片下载的Demo
Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnection,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用这个MyHttpUtils库可以大大的简化操作,它是基于...
android请求web服务器的四种方式 HttpURLConnection 方式下的get post请求、 HttpGet请求 HttpPost请求
首先需要明确的是,Http通信中的POST和GET请求方式的不同。GET可以获得静态页面,也可以把参数放在URL字符串后面,传递给服务器。而POST方法的参数是放在Http请求中。因此,在编程之前,应当首先明确使用的请求...
Http通信又分为两种方式:get和post,get可以uoqu静态页面,传入参数可以放在url当中,而post方法的传入参数则是放在httprequest(请求)当中。前面提到的HttpUrlConnection接口是java当中的通信接口,而HttpClient...
用于异步执行 HttpGet、HttpPost、HttpPut、HttpDelete、Multipart-Put、Multipart-Post 和带有回调的 HttpUrlConnection 的库。 简化网络通信所需的代码量。 兼容 Android 2.2 及以上版本。 特征 兼容Android 2.2 ...
OkHttp是一款优秀的HTTP框架,它支持get请求和post请求,支持基于Http的文件上传和下载,支持加载图片,支持下载文件透明的GZIP压缩,支持响应缓存避免重复的网络请求,支持使用连接池来降低响应延迟问题 Get请求 ...
一些工具类代码块的标准代码: 异步的Get请求 异步的Post请求 Get请求,获得返回数据 向指定 URL 发送POST方法的请求 使用finally块来关闭输出流和输入流
HTTP协议是一款基于短连接的协议,每次交互完毕后连接断开,而HTTP请求又分为GET和POST两种方式,GET请求比较简单,只需要在网址后面用?拼接请求的资源路径,如百度图片输入动漫关键字的地址 ht
HttpAgent Android网络请求框架,可以自定义网络引擎,支持GET,POST,文件上传,文件下载,可以监听文件下载上传进度。本库内部基于OkHttp和HttpUrlConnection实现了两套网络请求逻辑,使用者可以根据自己的需要...
11.1.1 将HttpClient用于HTTPGET请求 11.1.2 将HttpClient用于HTTPPOST请求(多部分POST请求示例) 11.1.3 SOAP、JSON和XML分析程序 11.1.4 处理异常 11.1.5 解决多线程问题 11.1.6 有趣的超时 ...
URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和URL之间的通信连接。...Step3:如果只是发送GET方式的请求,那么使用connect方法建立和远程资源之间的实际连接即可;如果需要发送POST
11.1.1 将HttpClient用于HTTPGET请求 11.1.2 将HttpClient用于HTTPPOST请求(多部分POST请求示例) 11.1.3 SOAP、JSON和XML分析程序 11.1.4 处理异常 11.1.5 解决多线程问题 11.1.6 有趣的超时 ...
11.3.1 HttpURLConnection的get请求 11.3.2 获取网络上的图片 11.3.3 文件下载 11.3.4 文件上传 11.4 HttpClient 11.4.1 HttpGet请求 11.4.2 HttpPost请求 11.5 本章小结 第12章 数据解析 12.1 XML 12.1.1 DOM ...
1.Android Activity业务(HttpURLConnection,网络请求POST,GET) 2.多线程交互(Handler,Message等) 3.WiFi管理器 4.Activity后台运行 5.分析Log提示,修改BUG 5.零碎技术 开发中遇到的问题: 0.学校WiFi...
利用HttpURLConnection实现Get和Post网络请求。利用JSONObject与Gson解析 json 字符串Demo。