与Android HttpURLConnection包含相等(=)符号的Cookie

时间:2014-11-05 15:01:22

标签: java http cookies httpurlconnection

我正在编写一个应该与Web应用程序通信的Android客户端(使用webapp2在appengine上运行)。客户端在服务器上发送POST请求,需要先进行身份验证。

应用程序将身份验证令牌存储为会话cookie。 这些cookie的价值有相同的标志。例如

Set-Cookie: auth=bsoq64sesba=als|sadasd|sdads

我在客户端使用HttpURLConnection。问题是如果cookie包含等号,则会被截断。因此,当发送下一个请求时,服务器会收到以下cookie:

auth=bsoq64sesba

当然没用。有没有办法正确接收带有值相等标志的cookie?

以下是发送请求的代码

/*The cookie store is initiated once, before the first request*/
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);

/*Prepare the connection*/
URL url = new URL(address);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
connection.setChunkedStreamingMode(0);

/*Write request body*/
OutputStream ostream = connection.getOutputStream();
ostream.write(postBody);
ostream.flush();

/*Read response*/
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String responseContents = "";
String line;
while ((line=reader.readLine())!=null) responseContents+=line;
return responseContents;

1 个答案:

答案 0 :(得分:0)

在发送Cookie值之前,您需要对 = 进行编码,并在收到时对其进行解码。我建议用URL编码。您无法使用Base64编码,因为它在编码时使用 =

以下是link如何在Java中进行此操作。