我在CookieStore对象中有我的cookie,但要流式传输视频我需要将我的CookieStore转换为String,但我在NodeJS中的API(使用express,cookie-parser和passport-local)永远不会识别它的值cookie,每当我尝试编码/解码之前。我认为这是一个愚蠢的问题,因为我在HTTP Headers中并不是很好,所以我做错了。
有代码:
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转换为String:
{ 'connect.sid': 's:AZXpZmQGX7eJgej9hVA1qaAk.7vWP756Flwbte/qxBRcLOhl/CXMlVO3HVvmsvsEBpzA' }
我尝试了所有选项,甚至是encode(decode())
,...但它在我的API上永远不是一个好选项。
奇怪的是,我尝试使用javascript函数“'s%3ANUTf...'
”解码cookie.getValue()
(所以decodeURIComponent()
)并且我找到了's:NUTf8t9o8cepR1yYItMexMxy.WFv/ZlktryfpVZHweVozabW1US4UBvGlWxQR7G7Aamc'
,所以我的cookie很好,但是我想我在编码/解码部分做错了。
感谢您的帮助。
编辑:经过多次测试,我看到在API上,cookie的值总是相同的,每当我使用URLDecoder.decode(),URLDecoder.decode()或事件直接cookie.getValue()时,唯一的我得到正确价值的时候就是当我像“totoauzoo”一样“选择/写”这个值时,例如这个wring我在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请求:
headers {host:'xxx', 连接:'保持活力', cookie:'connect.sid = s%3AKWKdcuXqUpzBIMv0sOGpPxqM.xb14kPsGKvn%2Fv%2BVcfUDzxWsye8QdJfuQgonNocsX3k8', 'user-agent':'stagefright / 1.2(Linux; Android 4.1.2)', 'accept-encoding':'gzip,deflate'} cookies {'connect.sid':'s:KWKdcuXqUpzBIMv0sOGpPxqM.xb14kPsGKvn / v + VcfUDzxWsye8QdJfuQgonNocsX3k8'}
我该如何解决?
答案 0 :(得分:1)
我建议检查网络流量本身。 Cookie只不过是HTTP标头......
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
或
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: name=value; name2=value2
Accept: */*
我不熟悉您用来设置cookie的类,但我会检查两个地方:
<强> 1 强>
params.put("Cookie", ARequestAPI.getCookieString());
此调用是设置标题还是您设置POST参数?这应该在网络流量中可见。什么是 params ?标题,查询字符串?
<强> 2 强>
ARequestAPI.getCookieString()
此函数的输出是否为正确的cookie值格式,或者是什么?
很可能在其中一个地方存在错误。