安卓中的HTTP编程
来源:互联网 发布:淘宝怎么改旺旺名字 编辑:程序博客网 时间:2024/04/28 22:07
1、几个概念
HTTP(HyperText Transport Protocol)超文本传输协议。
HTTPClient是用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且支持HTTP协议的最新的版本和建议。HTTPClient就是专门设计用来简化HTTP客户端与服务器间各种通信编程的。通过它可以让原来很复杂的事情现在很轻松解决。
URI(uniform resource identifier)代表统一资源标识符。
URL(uniform resource locator)代表统一资源定位符。
URLConnection则代表了应用程序和URL之间的通信连接,通过URLConnection类的实例可以读取和写入此URL应用的资源。
2、关于HTTP
HTTP的URL格式:http://host[":"port][abs_path]
HTTP有两类报文:请求报文和响应报文
请求报文由请求行、请求报头、空行和请求数据4个部分组成
请求行由请求方法字段、URI字段和HTTP协议版本字段组成,它们之间用空格分隔。格式如下:
Method Request-URI HTTP-Version CRLF
例如:GET/form.html HTTP/1.1 (CRLF)
响应报文由请状态行、响应报头、空行和响应正文4个部分组成
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
例如:HTTP/1.1 200 OK (CRLF)
3、通过URL对象获得资源
4、HTTPClient
(1)Get在HttpClient的使用
Get方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用Get方法时,请求参数和对应的值附加在URL后面,利用一个问号("?")代表URL的结尾与请求参数的开始。
上面的GET方法是以InputStream的形式放回页面的信息,很多情况下需要以StringBuider、String等字符串的格式。下面的方法把InputStream格式转为StringBuider和String格式。
(2)Post在HttpClient的使用
Post方法要求被请求服务器接收附在请求后面的数据,常用于提交表单。当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称值的形式出现,可以传输大量数据。
(3)使用HttpClient需要以下7个步骤:
步骤1:创建HTTPClient的实例。
步骤7:对得到的内容进行处理。
5、URLConnection
(1)关键部分代码
(2)使用URLConnection有以下5个步骤:
步骤一:根据URL获得URLConnection对象,并将其强制转换为其子类对象HttpURLConnection。
步骤二:由于默认请求为GET请求,直接可以调用connect()方法。
步骤三:在请求已被成功接受的情况下,获得该URL的InputStream输入流。
步骤四:包装InputStream输入流,将其还原成原来的资源。
步骤五:断开连接。
6、使用HttpClient和URLConnection访问维基百科
(1)使用HttpClient访问
(2)使用URLConnection访问
HTTP(HyperText Transport Protocol)超文本传输协议。
HTTPClient是用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且支持HTTP协议的最新的版本和建议。HTTPClient就是专门设计用来简化HTTP客户端与服务器间各种通信编程的。通过它可以让原来很复杂的事情现在很轻松解决。
URI(uniform resource identifier)代表统一资源标识符。
URL(uniform resource locator)代表统一资源定位符。
URLConnection则代表了应用程序和URL之间的通信连接,通过URLConnection类的实例可以读取和写入此URL应用的资源。
2、关于HTTP
HTTP的URL格式:http://host[":"port][abs_path]
HTTP有两类报文:请求报文和响应报文
请求报文由请求行、请求报头、空行和请求数据4个部分组成
请求行由请求方法字段、URI字段和HTTP协议版本字段组成,它们之间用空格分隔。格式如下:
Method Request-URI HTTP-Version CRLF
例如:GET/form.html HTTP/1.1 (CRLF)
响应报文由请状态行、响应报头、空行和响应正文4个部分组成
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
例如:HTTP/1.1 200 OK (CRLF)
3、通过URL对象获得资源
public final InputStream openStream()URL---->InputStream---->Java程序
4、HTTPClient
(1)Get在HttpClient的使用
Get方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用Get方法时,请求参数和对应的值附加在URL后面,利用一个问号("?")代表URL的结尾与请求参数的开始。
//通过Get方法获取页面信息//参数为对应页面的URLpublic static InputStream getInputStreamFromUrl(String url){//定义输入流变量InputStream content=null;try{//取得默认的HTTPClient实例HTTPClient httpClient=new DefaultHttpClient();//创建HttpGet实例,连接到服务器HttpResponse response=httpClient.execute(new HttpGet(url));//获取数据内容content=response.getEntity().getContent();}catch(Exception e){}//以InputStream形式返回页面信息return content;}
上面的GET方法是以InputStream的形式放回页面的信息,很多情况下需要以StringBuider、String等字符串的格式。下面的方法把InputStream格式转为StringBuider和String格式。
//将InputStream格式转化为StringBuider格式private StringBuider inputStreamToStringBuider(InputStream is){//定义空字符串String line="";//定义StringBuider的实例totalStringBuider total =new StringBuider();//定义BufferedReader,载入InputStreamReaderBufferedReader rd=new BufferedReader(new InputStreamReader(is));//readLine是一个阻塞的方法,当没有断开连接的时候就会一直等待,直到有数据返回//返回null表示读到数据流最末尾while((line=rd.readLine())!=null){total.append(line);}//以StringBuider形式返回数据内容return total;}
//将InputStream格式转化为String格式private String inputStreamToString(InputStream is){//定义空字符串String s="";String line="";//定义BufferedReader,载入InputStreamReaderBufferedReader rd=new BufferedReader(new InputStreamReader(is));//读取到字符串中while((line=rd.readLine())!=null){s+=line;}//以String形式返回数据内容return s;}
(2)Post在HttpClient的使用
Post方法要求被请求服务器接收附在请求后面的数据,常用于提交表单。当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称值的形式出现,可以传输大量数据。
public void postData() {//创建一个新的HTTPClient Post头HttpClient httpClient=new DefaultHttpClient();HttpPost httpPost=new HttpPost("http://www.google.com");try {//添加数据List<NameValuePair> nameValuePairs=new ArrayList<NameValuePair>(2);nameValuePairs.add(new BasicNameValuePair("id","12345"));nameValuePairs.add(new BasicNameValuePair("stringdata","myString"));//使用utf-8格式对数据进行编码httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));//执行HTTPPOST请求HttpResponse response=httpClient.execute(httpPost);}catch(ClientProtocolException e){}catch (Exception e) {}}
(3)使用HttpClient需要以下7个步骤:
步骤1:创建HTTPClient的实例。
HttpClient httpClient=new DefaultHttpClient();步骤2:创建某种连接方法的实例,对于get方法时GetMethod,而对于post方法是PostMethod。
HttpGet rquest = new HttpGet(String url);HttpPost rquest = new HttpPost(String url);步骤3:对于HttpPost对象而言,可以调用setEntity(HttpEntity entity)方法来设置请求参数。
ArrayList<NameValuePair> params=new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("name",user));params.add(new BasicNameValuePair("pwd",pwd));request.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));步骤4:调用步骤1中创建好的实例的execute方法来执行步骤2中创建好的method实例,执行完该方法返回一个HttpResponse对象。
HttpResponse response=httpClient.execute(request);步骤5:处理HttpResponse对象,调用HttpResponse对象的get...会得到响应的内容。
String msg=EntityUtils.toString(response.getEntity());步骤6:释放连接。
步骤7:对得到的内容进行处理。
5、URLConnection
(1)关键部分代码
URL url=new URL("http://sc.ccit.js.cn");URLConnection uc=url.openConnection();HttpURLConection huc=(HttpURLConection)uc;//连接,可有可无huc.connect();int response=huc.getResponseCode();if(response==HttpURLConnection.HTTP_OK){……huc.disconnect();}else if(response==HttpURLConnection.HTTP_NOT_FOUND){……}//URLConnection里的两个重要方法getInputStream()和getOutputStream()InputStream inputStream=huc.getInputStream();byte[] b=new byte[inputStream.available()];inputStream.read(b);String msg=new String(b);
(2)使用URLConnection有以下5个步骤:
步骤一:根据URL获得URLConnection对象,并将其强制转换为其子类对象HttpURLConnection。
步骤二:由于默认请求为GET请求,直接可以调用connect()方法。
步骤三:在请求已被成功接受的情况下,获得该URL的InputStream输入流。
步骤四:包装InputStream输入流,将其还原成原来的资源。
步骤五:断开连接。
6、使用HttpClient和URLConnection访问维基百科
(1)使用HttpClient访问
//给出访问的URLString wikiSearchURL = "http://zh.wikipedia.org/w/api.php?action=opensearch&search=Android";//初始化DefaultHttpClientDefaultHttpClient httpClient=new DefaultHttpClient();//创建HttpGetHttpGet httpGet=new HttpGet(wikiSearchURL);//创建ResponseHandlerResponseHandler<String> responseHandler=new BasicResponseHandler();try {//获取返回的内容String content=httpClient.execute(httpGet, responseHandler);//提示连接成功Toast.makeText(getApplicationContext(), "连接维基百科成功", Toast.LENGTH_SHORT).show();//显示到应用界面上showWiki.setText(content);} catch (Exception e) {//提示连接失败Toast.makeText(getApplicationContext(), "连接维基百科失败", Toast.LENGTH_SHORT).show();e.printStackTrace();}//关闭连接httpClient.getConnectionManager().shutdown();
(2)使用URLConnection访问
//给出访问的URLString wikiSearchURL = "http://zh.wikipedia.org/w/api.php?action=opensearch&search=Android";try {//初始化URLURL url=new URL(wikiSearchURL);//创建HttpURLConnection,并打开连接HttpURLConnection httpconn=(HttpURLConnection) url.openConnection();//连接,可有可无httpconn.connect();//判断获取的应答码是否正常if(httpconn.getResponseCode()==HttpURLConnection.HTTP_OK){//给出连接成功的提示Toast.makeText(getApplicationContext(), "连接维基百科成功", Toast.LENGTH_SHORT).show();//创建InputStreamReader,设置字符编码为utf-8InputStreamReader isr=new InputStreamReader(httpconn.getInputStream(),"utf-8");int i;String content="";//读取消息到content中while ((i=isr.read())!=-1) {content=content+(char)i;}isr.close();//将获取的内容显示到界面上showWiki.setText(content);}//断开连接httpconn.disconnect();} catch (Exception e) {//提示连接失败Toast.makeText(getApplicationContext(), "连接维基百科失败", Toast.LENGTH_SHORT).show();e.printStackTrace();}
0 0
- 安卓中的HTTP编程
- 安卓中的网络编程
- 安卓Http编程之HttpClient
- 拿来主义:安卓中的UDP模拟编程
- 安卓网络编程-HTTP协议访问网络
- Socket编程在安卓开发中的应用
- 安卓网络开发之http协议的概述(学习安卓网络编程语言的学习心得)
- 安卓http操作方式
- 安卓基础:Http协议
- 安卓----多媒体编程
- 安卓界面编程
- 安卓编程规范
- 安卓编程
- 安卓编程规范
- 安卓1104_HTML CSS javascript Web 服务器 Servlet Range Http 网络编程
- 菜鸟的安卓实习之路---http 中的post 和get 方法
- 安卓日记——http中的get和post方法
- 安卓中的 ImageView
- mysql开启慢查询方法
- Exchange Web Services简单发送邮件
- Android framework中双击home 的实现
- EMC软开电面
- 2013年5月SAT语法考试真题及解析
- 安卓中的HTTP编程
- 网狐_经典版机器人添加说明
- android 加载图片oom的好的解决方法
- Android的Library工程
- linux-nfs-安装
- 內表数据导出到EXCEL文件中
- 安卓开发随记(1)
- unique_ptr使用简介
- 2015.6.25 Textfield汇总