android访问http协议
来源:互联网 发布:dnf数据异常掉线 编辑:程序博客网 时间:2024/06/01 11:00
由于本次笔记是在本机上执行的,所以安装了appache的tomcat服务器,首先认识一下,servlet类,这个类是在tomcat服务器里面进行协议的,tomcat属于协议里面的应用层吧,所以和路由器里面的那层没什么重要的联系,本次是在本机上执行的,因为要进行访问,所以我的手机终端要用到的网管是路由器里面的默认网关,而我的路由器可以发送wifi网络,网关和电脑连接的网关是一致的,所以网络是没有问题的,接下来的问题就是http协议的具体流程了,java里面的tomcat服务器是可以直接加载servlet类的,浏览器可以正常访问,说明servelt的http协议是通的,因为本次用的是post请求数据的,又是传递json数据的,java读取客户端发送过来的消息都是通过流来接受的,所以传递json数据也是通的,接下来就是字符编码的问题了,客户端发送的中文到tomcat这边来默认的不是utf-8,所以servlet在接受客户端发送过来的请求时候需要设置一下接受的字符编码了,这客户端发送的请求已经接收了,现在就是要给客户端发送数据了,不知道什么问题,反正一开始我客户端接受的数据不论怎么解码,编码都是乱码,最终确认了让tomcat默认发送消息头是默认的编码,然后客户端这边用tomcat默认的字符编码解码,然后再编码,乱码问题解决了;现在来看看截图
1.查看本地网络配置
服务端的代码:
package com.android.test;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.util.Collection;import java.util.Date;import java.util.Enumeration;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.json.JSONException;import org.json.JSONObject;import netscape.javascript.JSObject;/** * Servlet implementation class AndroidServlet */@WebServlet(urlPatterns = "/Login", name = "AndroidServlet", initParams = {@WebInitParam(name = "name", value = "huangxudong"), @WebInitParam(name = "pass", value = "123456") })public class AndroidServlet extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public AndroidServlet() {super();// TODO Auto-generated constructor stub}/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// TODO Auto-generated method stub}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */protected void doPost(HttpServletRequest request, HttpServletResponse response){// TODO Auto-generated method stubString nString=response.getContentType();StringBuffer stringBuffer = new StringBuffer();String name = null;String pass = null;InputStream inputStream = null;try {request.setCharacterEncoding("UTF-8");} catch (UnsupportedEncodingException e2) {// TODO Auto-generated catch blocke2.printStackTrace();}try {inputStream = request.getInputStream();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}byte[] bs = new byte[1024];int length;try {while ((length = inputStream.read(bs)) != -1) {stringBuffer.append(new String(bs, 0, length,"UTF-8"));}} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}if (stringBuffer != null) {JSONObject jsonObject = new JSONObject(stringBuffer);try {name = jsonObject.getString("username");pass = jsonObject.getString("password");} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (name != null && pass != null) {if (name.equals(getInitParameter("name")) && pass.equals(getInitParameter("pass"))) {JSONObject jsonObject = new JSONObject();try {jsonObject.put("msg", "112");jsonObject.put("date", new Date());response.setContentType("application/json");response.setCharacterEncoding("UTF-8");response.getWriter().write(new String(jsonObject.toString().getBytes(),"UTF-8"));} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} else {JSONObject jsonObject = new JSONObject();try {jsonObject.put("msg", "123啊是");jsonObject.put("date", new Date());response.getWriter().write(jsonObject.toString());} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
由于是进行测试,所以代码质量没有在意..
再来看android端的代码:
package www.hubei.servlet.myapplication;import android.support.design.widget.TextInputEditText;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLDecoder;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private TextInputEditText mTextInputEditText,mTextInputEditText1; private Button mButton,mButton1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextInputEditText= (TextInputEditText) findViewById(R.id.et_username); mTextInputEditText1= (TextInputEditText) findViewById(R.id.et_userpass); mButton= (Button) findViewById(R.id.btn_get); mButton1= (Button) findViewById(R.id.btn_post); mButton.setOnClickListener(this); mButton1.setOnClickListener(this); } private void doPost(String username,String password) throws IOException, JSONException { if (mTextInputEditText.getText().toString().isEmpty()||mTextInputEditText.getText().toString().equals(null)){ Toast.makeText(this, "用户名不能为空!!!", Toast.LENGTH_SHORT).show(); return; } if (mTextInputEditText1.getText().toString().isEmpty()||mTextInputEditText1.getText().toString().equals(null)){ Toast.makeText(this, "用户名密码不能为空!!!", Toast.LENGTH_SHORT).show(); return; } URL url=new URL("http://10.0.2.2:8080/TestHttp/Login"); HttpURLConnection httpURLConnection= (HttpURLConnection) url.openConnection(); httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setConnectTimeout(4000); httpURLConnection.setRequestProperty("Content-Type", "application/json"); httpURLConnection.setRequestProperty("Connection", "Keep-Alive"); httpURLConnection.setRequestProperty("Charset", "UTF-8"); OutputStream outputStream=httpURLConnection.getOutputStream(); JSONObject jsonObject=new JSONObject(); jsonObject.put("username",username); jsonObject.put("password",password); String url1=new String(jsonObject.toString().getBytes(),"UTF-8"); StringBuffer stringBuffer=new StringBuffer(); outputStream.write(url1.getBytes()); outputStream.flush(); if (200==httpURLConnection.getResponseCode()){ InputStream inputStream=httpURLConnection.getInputStream(); InputStreamReader streamReader=new InputStreamReader(inputStream,"iso8859-1"); char []bytes=new char[1024]; int length; while ((length=streamReader.read(bytes))!=-1){ stringBuffer.append(new String(bytes,0,length)); } } Log.e("aaa", new String(stringBuffer.toString().getBytes("iso8859-1"),"UTF-8")); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_get: break; case R.id.btn_post: new Thread(){ @Override public void run() { super.run(); try { doPost(mTextInputEditText.getText().toString(),mTextInputEditText1.getText().toString()); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }.start(); break; } }}
由于最后我要在模拟器上进行测试,所以主机地址改成了android模拟器默认的ip地址,这都是要注意的哦。
最后还说下,用谷歌浏览器的开发者工具,可以对web前端进行抓包,然后进行分析,协议分:协议头和body体的,客户端发送http协议请求都是要设置协议头的,服务器返回的时候也是要设置协议头的,具体的协议头可以在开发者工具中查看,顺便截图一下谷歌的开发者工具:
- android访问http协议
- Android Http协议访问网络
- Android - HTTP 协议访问网络
- Android:HTTP协议访问网络
- Android学习使用HTTP协议访问网络
- Android之使用HTTP协议访问网络
- Android使用HTTP协议访问网络
- Android使用Http协议访问网络
- Android使用Http协议访问网络
- Android入门-使用Http协议访问网络
- Android之使用HTTP协议访问网络
- Android—使用Http协议访问网络
- android中使用http协议访问网络
- Android使用http协议访问网络
- HTTP访问协议封装
- HTTP协议授权访问
- HTTP协议授权访问
- HTTP 协议访问网络
- 简单的分页显示工具类
- Servlet中的GET和POST之间的区别
- CentOS6安装python2.7(主要是因为想用 pip 的话需要2.7版本以上) + miniconda
- 优化数据库第二章
- SPI读写总结
- android访问http协议
- 文章标题
- 不用XMLHttpRequest来模仿AJAX
- 将rotated_rect旋转到正矩形的方法记录
- eclipse启动打印gc.log
- JSON解析-----GSON
- Elasticsearch之深入类型。
- (21)jdbc一
- win7(64位)php5.5-Apache2.4-mysql5.6环境安装--maccms