您的位置:首页 > 理论基础 > 计算机网络

Http的post ,get请求

2016-03-29 13:43 417 查看
1:

比如你去商店买个雪糕 给他1块钱 告诉他 我要一个 蒙牛随便雪糕 他就给你一个蒙牛随便雪糕 , 只要他有就会给你,如果他没有就告诉你他没有。这个就是一个请求响应。

下面对号入座
ip 或者url 就是 商店的地址。你得知道去哪买参数就是 一个蒙牛雪糕的id 在网络里一般是传id就ok了返回就是给你一个随便雪糕。至于你是你买 还是你妈妈买 还是你老板 。或者你老板的小秘买 基本是一样的 ,都是会返回你一个雪糕而已 。
总结一下就是。服务器写好了放那就行 ,用浏览器 测试一下,就知道 正不正确了。如果浏览器测试没有问题 一般在客户端发请求都会收到正常的响应。浏览器就是一个客户端,android手机也是客户端。虽然开发服务器很高大上。那是过去。在android 我们关系的就是我的请求会得到响应 具体响应什么 我们会约定好的。
了解了服务器在谈谈android开发
ndroid应用开发一般就两个分支 一个是工具类的可能不是很需要从服务器获取数据
另一个就是浏览型的基本数据都是从服务器获取的。服务器返回什么我就显示什么,具体数据是我们之前约定好的 比如我想要蒙牛随便雪糕 他就会给我,他没给是他的问题,我只要告诉用户说服务器不给就ok了 。

具体开发时候可以绕过浏览器,我设计好接口 然后 设计好返回我就可以做测试了 具体服务器对接其实不会影响我这边的具体问题的。这样开发客户端就非常简单了。在没有服务器的情况下也可以做简单的开发,虽然会比有的时候麻烦一点 但是也是值得推荐的。不要把一切工作推到服务器开发完成。

具体开发流程就非常简单了。
比如我开发一个用户模块。包括登录,注册,修改,获取用户列表,删除用户。典型的crud模式。最典型的整删改查都有了,服务器交互就是简单的整删改查而已。
这里要介绍一个大名鼎鼎的库 google的 gson库。自从用了这个,做交互方便了不是一点半点
gson 支持 从对象 到 json字符串的转换 就一句话 gson。tojson(Object);就完成了即使是集合也没有问题。什么他竟然还支持泛型。简直高大上啊。
至于json 转换成对象就要麻烦一点点 怎么麻烦呢,他需要获取一个Type就是想要转换的实体类的类型 代码如下

Gson gson = New Gson();获取gson对象
Type type = new TypeToken<User>() {}.getType(); 获取转换类型
User user= gson.fromJson(jsonStr, type); 转换成具体对象

什么就两行代码就把json字符串转换层user对象了 什么这个也支持泛型,还支持泛型嵌套。而且效率非常高,速度非常快。简直太高大上了。
了解gson 做开发就方便了,具体流程
登录 我传new 一个user对象转换成 json 字符串 发送给服务器 服务器解析json成user 对象判断用户是否存在 密码是不是正确 告诉我登录是否成功就ok了。
注册道理是一样的 都是发送一个json 而已。

修改用户信息麻烦一点 就是 需要先查询用户信息。想修改就一定要知道修改谁,比如我登录了 肯定会获取一个登录的id 就是用户id 那我想获取我的信息就会发送我的id告诉服务器我要获取信息 服务器就会返回我的信息 服务器返回的是json 字符串 我转换层user对象 然后我会修改 在发给服务器。服务器告诉我是否成功就ok
基本所有的增删改查都是简单的服务器交互而已。其实腾讯新闻 啦。新浪微博啦。团购网站啦 都是可以这样的交互的 。而且非常标准。
你会一个模块其实别的模块 基本都是一摸一样的。只是实体类还了而已可能是 User Student 也可能是 Type 或者是 House 道理都是一样的。

示例代码:

post 请求数据量大,较安全:
将参数放入list中:

params = new LinkedList<BasicNameValuePair>();

params.add(new BasicNameValuePair("param1", "Post方法"));

params.add(new BasicNameValuePair("param2", "第二个参数"));

try {

HttpPost postMethod = new HttpPost(baseUrl);

postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //将参数填入POST Entity中

HttpResponse response = httpClient.execute(postMethod); //执行POST方法

Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码

Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //获取响应内容

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

post 请求示例2:

public void postRequest(View v) throws ClientProtocolException, IOException

{

//post请求

HttpPost httpPost = new HttpPost("http://218.0.4.4:8080/esoa/login.do");

//构造post请求内容

NameValuePair nameValuePair1 = new BasicNameValuePair("username","linpan");

NameValuePair nameValuePair2 = new BasicNameValuePair("password",
"123456");

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

nameValuePairs.add(nameValuePair1);

nameValuePairs.add(nameValuePair2);

HttpEntity httpEntity = new UrlEncodedFormEntity(nameValuePairs);

httpPost.setEntity(httpEntity);

//执行post请求

HttpClient httpClient = new DefaultHttpClient();

httpResponse = httpClient.execute(httpPost);

//读取返回数据

httpEntity = httpResponse.getEntity();

InputStream inputStream = null;

inputStream = httpEntity.getContent();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

String line = "";

String result = "";

while((line = bufferedReader.readLine()) != null)

{

result = result + line;

System.out.println(line);

}
inputStream.close();

}

get 的请求:
示例1:

//先将参数放入List,再对参数进行URL编码

List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();

params.add(new BasicNameValuePair("param1", "中国"));

params.add(new BasicNameValuePair("param2", "value2"));

//对参数编码

String param = URLEncodedUtils.format(params, "UTF-8");

//baseUrl

String baseUrl = "http://ubs.free4lab.com/php/method.php";

//将URL与参数拼接

HttpGet getMethod = new HttpGet(baseUrl + "?" + param);

HttpClient httpClient = new DefaultHttpClient();

try {

HttpResponse response = httpClient.execute(getMethod); //发起GET请求

Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码

Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//获取服务器响应内容

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

get 请求示例2;

////////////get 请求//////////////////

public void getRequestWeb(View v)

{

HttpGet httpGet = new HttpGet("http://www.pan-apps.com");

HttpClient client = new DefaultHttpClient();

InputStream inputStream = null;

try {

httpResponse = client.execute(httpGet);

httpEntity = httpResponse.getEntity();

inputStream = httpEntity.getContent();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

String line = "";

String result = "";

while((line = bufferedReader.readLine())!= null){

result = result + line;

System.out.println(line);

}

System.out.println(result);

} catch (Exception
e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

finally{

try {

inputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: