我在CookieStore对象中拥有自己的Cookie,但为了流式传输视频,我需要将我的CookieStore转换为字符串,但是我的NodeJS中的API(使用express,cookie-解析器和本地护照)永远不会识别cookie的价值,无论何时我尝试对其进行编码/解码。我认为这是一个愚蠢的问题,只是我并不擅长HTTP头,所以我做错了。将CookieStore转换为字符串:带编码/解码值的pb
有代码:
Method setVideoURIMethod = videovvw.getClass().getMethod("setVideoURI", Uri.class, Map.class);
Map<String, String> params = new HashMap<String, String>(1);
params.put("Cookie", ARequestAPI.getCookieString());
setVideoURIMethod.invoke(videovvw, uri[0], params);
我不得不将代码从这里,所以通常它应该很好地工作:Authentication for Videoview in android
我认为这个问题是来自 “ARequest.getCookieString()
”:
protected static CookieStore _cookies = null;
...
...
...
public static String getCookieString() {
String cookieString = "";
Log.v("Debug", _cookies.toString());
for (Cookie cookie : _cookies.getCookies()) {
try {
Log.v("Debug", "Decode: " + URLDecoder.decode(cookie.getValue(), "UTF-8"));
Log.v("Debug", "Encode: " + URLEncoder.encode(cookie.getValue(), "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
cookieString += cookie.getName() + "=" + cookie.getValue()+ ";";
}
return cookieString;
}
LogCat中的显示:
和日志上的我的API: 当我使用的CookieStore请求:
{ 'connect.sid': 's:NUTf8t9o8cepR1yYItMexMxy.WFv/ZlktryfpVZHweVozabW1US4UBvGlWxQR7G7Aamc' }
当我做我的功能,其中的CookieStore转换为字符串要求:
{ 'connect.sid': 's:AZXpZmQGX7eJgej9hVA1qaAk.7vWP756Flwbte/qxBRcLOhl/CXMlVO3HVvmsvsEBpzA' }
我尝试了所有选项,即使encode(decode())
,...但它在我的API上从来就不是一个好选择。 奇怪的是,我试图解码's%3ANUTf...'
(所以cookie.getValue()
)与JavaScript函数“decodeURIComponent()
”,我发现正好's:NUTf8t9o8cepR1yYItMexMxy.WFv/ZlktryfpVZHweVozabW1US4UBvGlWxQR7G7Aamc'
,所以我的cookie是好的,但我认为我在编码/解码部分做错了什么。
感谢您的帮助。编辑:经过多次测试,我发现在API上,Cookie的值始终相同,无论何时使用URLDecoder.decode(),URLDecoder.decode()或事件直接cookie.getValue(),只有当我获得正确的价值时,我自己“选择/写入”自己的价值,如“totoauzoo”,例如与这种威胁,我得到完全相同的API值。但它不适用于我的旧cookie值,如“s:DMCBao7zeS9B2jwIfeQoDZtl.3XPIYIm7y2Bz9/o468v4wxvFZmjDrc6hKk4ty89sIX4”。
EDIT2:我可能会发现什么是错的,我得到的API:
与请求HTTPGET和的CookieStore:
headers { host: 'xxx',
connection: 'Keep-Alive',
'user-agent': 'Apache-HttpClient/UNAVAILABLE (java 1.4)',
cookie: 'connect.sid=s%3AGRGciNxOcR4BXHrUG8PikHMX.MyWa6vjW%2BBlcUaaCHHendqc7DEK4aoNFDzm5aabOkDM',
cookie2: '$Version=1' }
cookies { 'connect.sid': 's:GRGciNxOcR4BXHrUG8PikHMX.MyWa6vjW+BlcUaaCHHendqc7DEK4aoNFDzm5aabOkDM' }
要求与setVideoURI:
头{主持人:“ XXX ' 连接: '保持活动', 饼干: 'connect.sid = S%3AKWKdcuXqUpzBIMv0sOGpPxqM.xb14kPsGKvn%2FV%2BVcfUDzxWsye8QdJfuQgonNocsX3k8', '用户代理':' 怯场/ 1.2(Linux的;的Android 4.1.2) “ , '接受编码': 'gzip的,放气'} 饼干{ 'connect.sid': 'S:KWKdcuXqUpzBIMv0sOGpPxqM.xb14kPsGKvn/V + VcfUDzxWsye8QdJfuQgonNocsX3k8'}
我该如何解决呢?
如何检查网络流量?所以为1)我设置:http://developer.android.com/reference/android/widget/VideoView.html#setVideoURI%28android.net.Uri,%20java.util.Map%3Cjava.lang.String ,%20java.lang.String%3E%29和2)我更确定它是正确的格式,因为我自己做了这个函数,但是cookie的名字在API上很好,只是值不对。 – Marchah 2014-10-22 09:38:43
检查我的编辑谢谢 – Marchah 2014-10-22 10:52:24
使用例如查尔斯http://www.charlesproxy.com/调试您的流量 – Drejc 2014-10-22 12:45:27