我将Cookie存储在CookieStore对象中,但是要流传输视频,我需要将CookieStore转换为字符串,但是无论何时,我在NodeJS中的API(使用express,cookie解析器和本地护照)都永远不会识别cookie的值我尝试对其进行编码/解码。我认为这是一个愚蠢的问题,只是我对HTTP标头的了解不是很好,所以我做错了。

有代码:

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()或直接使用event.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”,
  连接:“保持活动”,
  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'}

我该如何解决?

最佳答案

我建议检查网络流量本身。
Cookies就是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参数?这应该在网络流量中可见。什么是参数?标头,查询字符串?

2:

ARequestAPI.getCookieString()


此函数的输出是正确的cookie值格式,还是什么?

错误很可能在这些地方之一。

10-06 05:30