[android]-如何在向服务器发送request时附加已保存的cookie数据

[android]-如何在向服务器发送request时附加已保存的cookie数据

应用场景:
在开发android基于手机端+服务器端的应用时,登陆->获取用户信息->获取授权用户相关业务数据(如用户工作任务安排)
,此时就涉及到在登陆后必须把保存有用户已登陆的cookie数据(和服务器端使用cookie或session来判断用户是否登陆没关系,因为这两种方式,在客户端来说,都是通过保存cookie数据来实现的)一同发送到服务器端,不然,服务器端会认为你没有登陆,而不给提供用户工作任务安排的数据

我在工作中就遇到过这问题

一开始我是这样书写代码的





01 import java.io.IOException;





02 import java.net.SocketTimeoutException;





03 import java.util.ArrayList;





04 import java.util.List;





05 import org.apache.http.HttpResponse;





06 import org.apache.http.NameValuePair;





07 import org.apache.http.client.methods.HttpPost;





08 import org.apache.http.impl.client.AbstractHttpClient;





09 import org.apache.http.impl.client.DefaultHttpClient;





10  





11  





12 String result = "";





13 /* HTTP Post */





14 HttpPost httpRequest = new HttpPost(url);





15  





16 List<NameValuePair> params = new ArrayList<NameValuePair>();





17 params.add(new BasicNameValuePair(para, data));// jsonParameter





18  





19 try {





20     // HTTP request





21     httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));





22     // HTTP response





23  





24     DefaultHttpClient defaultHttpClient = new DefaultHttpClient();





25     // 请求超时





26     defaultHttpClient.getParams().setParameter(





27             CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);





28     // 读取超时





29     defaultHttpClient.getParams().setParameter(





30             CoreConnectionPNames.SO_TIMEOUT, 10000);





31              





32  





33     // 发送请求





34     HttpResponse httpResponse = defaultHttpClient.execute(httpRequest);





35  





36     // 得到应答的字符串





37     // 200 ok





38     if (httpResponse.getStatusLine().getStatusCode() == 200) {





39         result = EntityUtils.toString(httpResponse.getEntity());





40          





41     }





42 catch (ClientProtocolException e) {





43     System.out.println("ClientProtocolException:" + e.toString());





44     e.printStackTrace();





45     return null;





46 catch (UnsupportedEncodingException e) {





47     System.out.println("UnsupportedEncodingException:" + e.toString());





48     e.printStackTrace();





49 catch (SocketTimeoutException e) {





50     System.out.println("SocketTimeoutException:" + e.toString());





51     e.printStackTrace();





52 catch (IOException e) {





53     System.out.println("IOException:" + e.toString());





54     e.printStackTrace();





55 }

调用发现登陆成功后在获取工作任务时服务器提示未登陆,看来是没把cookie发送到服务器,由是找资料

修改后如下,有两个类
WebHelperResponse.java





1 package com.demo.utils;





2  





3 public class WebHelperResponse {





4     public String ResponseText = "";





5     public boolean IsOk = false;





6     public boolean IsError = false;





7     public String ErrMsg = "";





8 }

WebHelper.java

view
source

print?





001 package com.nt.android.app.slorders.utils;





002  





003 import java.io.IOException;





004 import java.net.SocketTimeoutException;





005 import java.util.ArrayList;





006 import java.util.List;





007 import org.apache.http.HttpResponse;





008 import org.apache.http.NameValuePair;





009 import org.apache.http.client.CookieStore;





010 import org.apache.http.client.entity.UrlEncodedFormEntity;





011 import org.apache.http.client.methods.HttpPost;





012 import org.apache.http.impl.client.AbstractHttpClient;





013 import org.apache.http.impl.client.DefaultHttpClient;





014 import org.apache.http.message.BasicNameValuePair;





015 import org.apache.http.params.CoreConnectionPNames;





016 import org.apache.http.protocol.HTTP;





017 import org.apache.http.util.EntityUtils;





018  





019 public class WebHelper {





020  





021     private static CookieStore cookieStore;





022  





023     public static WebHelperResponse postJson(String url, String data) {





024         return postData(url, data, "jsondata");





025     }





026  





027     public static WebHelperResponse postXml(String url, String data) {





028         return postData(url, data, "xmldata");





029     }





030  





031     // url参数中不允许有空格,否则将在new HttpPost(url)引发java.lang.IllegalArgumentException错误





032     public static WebHelperResponse postData(String url, String data,





033             String para) {





034         WebHelperResponse m_response = new WebHelperResponse();





035         m_response.IsOk = false;





036         m_response.IsError = false;





037  





038         String result = "";





039         /* HTTP Post */





040         HttpPost httpRequest = new HttpPost(url);





041         // param NameValuePair[]





042         // request.getParameter("name")





043         List<NameValuePair> params = new ArrayList<NameValuePair>();





044         params.add(new BasicNameValuePair(para, data));// jsonParameter





045  





046         try {





047             // HTTP request





048             httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));





049             // HTTP response





050  





051             DefaultHttpClient defaultHttpClient = new DefaultHttpClient();





052             // 请求超时





053             defaultHttpClient.getParams().setParameter(





054                     CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);





055             // 读取超时





056             defaultHttpClient.getParams().setParameter(





057                     CoreConnectionPNames.SO_TIMEOUT, 10000);





058             // 添加Cookie





059             if (cookieStore != null) {





060                 defaultHttpClient.setCookieStore(cookieStore);





061             }





062  





063             // 发送请求





064             HttpResponse httpResponse = defaultHttpClient.execute(httpRequest);





065             int responseStatusCode = httpResponse.getStatusLine()





066                     .getStatusCode();





067             System.out.println("response statuscode:" + responseStatusCode);





068             // 得到应答的字符串





069             // 200 ok





070             if (responseStatusCode == 200) {





071                 result = EntityUtils.toString(httpResponse.getEntity());





072                 // 保存Cookie





073                 cookieStore = ((AbstractHttpClient) defaultHttpClient)





074                         .getCookieStore();





075  





076                 m_response.IsError = false;





077                 m_response.IsOk = true;





078                 m_response.ResponseText = result;





079  





080             else if (responseStatusCode == 404) {





081                 // 找不到页面





082                 m_response.IsError = true;





083                 m_response.IsOk = false;





084                 System.out.println("404:page not found.");





085                 m_response.ErrMsg = "不存在此服务,请检查服务器地址配置";





086             else {





087                 m_response.IsError = true;





088                 m_response.IsOk = false;





089                 System.out.println("error,responsestatuscode:"





090                         + responseStatusCode);





091                 m_response.ErrMsg = "服务出错";





092             }





093         catch (SocketTimeoutException e) {





094             System.out.println("ClientProtocolException:" + e.toString());





095             e.printStackTrace();





096  





097             m_response.IsError = true;





098             m_response.IsOk = false;





099             m_response.ErrMsg = "连接错误:未能连接到服务器!";





100  





101         catch (IOException e) {





102             System.out.println("ClientProtocolException:" + e.toString());





103             e.printStackTrace();





104  





105             m_response.IsError = true;





106             m_response.IsOk = false;





107             m_response.ErrMsg = "错误:服务器未能提供服务!";





108  





109         }





110         return m_response;





111     }





112  





113 }

[android]-如何在向服务器发送request时附加已保存的cookie数据,布布扣,bubuko.com

时间: 2024-08-05 06:38:48

[android]-如何在向服务器发送request时附加已保存的cookie数据的相关文章

在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/36425825 SQL Server 2008 + VS2010 用C#编写的代码,进行数据库还原的时候,出错: 错误内容: 在向服务器发送请求时发生传输级错误. (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程. 解决方法: 将SQL链接语句构造成如下: string strLink = @"server=.;database=Data

在向服务器发送请求时发生传输级错误。

遇到的问题和原帖差不多,不过是另一种状况,提出来,希望能帮助其他的小伙伴,俺是菜鸟,有不对的地方请多多包涵. 问题状况:恢复数据库的时候,将数据库给脱机 而后联机.再点击其他功能页面的时候,报错提示:在向服务器发送请求时发生传输级错误. (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程) 下面的解决方法,解决了问题. 在向服务器发送请求时发生传输级错误. (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程) 开始一直以

在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 -

作为总公司IT部门,自然承担着各个分公司的运维技术支持工作,由于公司的性质,分公司经常负责维护这各家官老爷的服务器,同时这些服务器也作为和官老爷数据之间的连接......此处省略一万字. 今天分公司就有个负责人发过来一段服务器的报错信息,大致如下" FireF|y゛ 2016/5/23 15:36:19日志名称:          Application来源:            XXXXX 日期:            2016/5/23 11:47:30事件 ID:         0任务

ModelDriven和prepareable接口解决update时,只会保存提交的数据,而将其余为重新设值的数据update为空的问题

1 public class EmployeeAction0 extends BaseAction implements 2 ModelDriven<Employee>, Preparable { 3 private IEmployeeService employeeService; 4 private PageResult<Employee> pageResult; 5 private Employee employee; 6 // 必须进行实例化 7 private Emplo

Hibernate中,将session绑定到线程时,在保存和查询数据的代码里,要正确的关闭session

比如有个保存的方法 // 保存 public void save(){ Transaction t = XXX Session s = getSession.beginTransaction(); XXX s.save(); XXX // 关闭session HibernateFactory.closeSession(); } ///查询 public void query(){ List list = query.list(); // 关闭session HibernateFactory.cl

Android - 向服务器发送数据(GET).

在此,使用HTTP协议,通过GET请求,向服务器发送请求,这种方式适合于数据量小,数据安全性要求不高的情况下. 一,服务器端,使用Servlet. 在服务器端,定义一个HttpServlet的子类,以及一个Filter的子类(用于统一编码,防止出现乱码). package spt.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.W

Android Socket发送信息时闪退

尝试Android写Socket通信的时候,遇到的个坑,记录一下: 1.无法建立连接. 原因:没有添加网络使用权限请求: 解决方式:在"AndroidMainfest.xml"中添加<uses-permission android:name="android.permission.INTERNET"/> 2.建立连接后正常接收信息,但发送信息时直接闪退,LogCat中异常提示为:android.os.NetworkOnMainThreadExceptio

解决连接vcenter (客户端无法向服务器发送完整的请求。(基础连接已经关闭:发送时发生错误。)) 问题

vCenter版本 5.5 vCenter 安装在server 2008 r2上面,今天补丁一打,重启后就无法连接vcenter了,起初以为是补丁的问题导致vcenter工作不正常,卸载了补丁依旧无法正常连接. 报未知连接错误,(客户端无法向服务器发送完整的请求.(基础连接已经关闭:发送时发生错误.)) 服务里面 vmware Virtualcenter server 服务启动不了. 倒腾了很久,, 很久   ,,    重装vcenter server 5.5的时候提示 vcenter 443

Android之通过向WebService服务器发送XML数据获取相关服务

原理图如下: 即客户端向WebService服务器通过HTTP协议发送XML数据(内部包含调用的一些方法和相关参数数据),然后WebService服务器给客户端返回一定的XML格式的数据,客户端通过解析这些XML数据即可得到需要的数据. 具体实现过程如下: 建立一个HTTP连接: 通过加载一个XML格式的SOAP协议数据,把该数据封装成实体并通过HTTP请求发送给WebService服务器: 获得WebService服务器返回的XML数据,通过解析获得需要的数据.   一些提供免费的WebSer