如何使用不良的Windows套接字在https GET请求中发送包含Unicode字符的cookie

时间:2019-07-01 21:13:40

标签: c

我正在创建win32应用程序,并且我在一个特定站点上工作。从先前的请求中,我提取了一些cookie,并希望实现它们。但是问题是,这些cookie中的一个包含unicode字母(上面带有点的latyn小字母e;在ASCII表中为279)。它是唯一经过url编码的cookie。解码时,我得到char \ u0117,Visual Studio编译器警告我它是unicode char并将其视为?标记。

这是经过网址编码的Cookie:

Set-Cookie: logged_user=%7B%22id%22%3A%22625936%22%2C%22email%22%3A%22vytautas.leveris%40gmail.com%22%2C%22display_name%22%3A%22Vytautas+L%5Cu0117veris%22%2C%22full_name%22%3A%22Vytautas+L%5Cu0117veris%22%2C%22photo%22%3A%22https%3A%5C%2F%5C%2Fwww.15min.lt%5C%2Fassets%5C%2Fimages%5C%2Fuser-default-icon.png%22%2C%22photo_small%22%3A%22https%3A%5C%2F%5C%2Fwww.15min.lt%5C%2Fassets%5C%2Fimages%5C%2Fuser-default-icon.png%22%2C%22photo_normal%22%3A%22https%3A%5C%2F%5C%2Fwww.15min.lt%5C%2Fassets%5C%2Fimages%5C%2Fuser-default-icon.png%22%2C%22staff%22%3Afalse%2C%22bookmarks%22%3A2%2C%22nb%22%3A1%7D; path=/

这是经过网址解码的Cookie:

Set-Cookie: logged_user={\"id\":\"625936\",\"email\":\"vytautas.leveris@gmail.com\",\"display_name\":\"Vytautas L\u0117veris\",\"full_name\":\"Vytautas L\u0117veris\",\"photo\":\"https:\/\/www.15min.lt\/assets\/images\/user-default-icon.png\",\"photo_small\":\"https:\/\/www.15min.lt\/assets\/images\/user-default-icon.png\",\"photo_normal\":\"https:\/\/www.15min.lt\/assets\/images\/user-default-icon.png\",\"staff\":false,\"bookmarks\":2,\"nb\":1}; path=/

最后,所有http GET请求:

strcpy(request,"GET / HTTP/1.1\r\nHost: www.15min.lt\r\nCookie: PHPSESSID=652e6dd2ac78de5db5392e53b9a0355a; logged_user={\"id\":\"625936\",\"email\":\"vytautas.leveris@gmail.com\",\"display_name\":\"Vytautas L\u0117veris\",\"full_name\":\"Vytautas L\u0117veris\",\"photo\":\"https:\/\/www.15min.lt\/assets\/images\/user-default-icon.png\",\"photo_small\":\"https:\/\/www.15min.lt\/assets\/images\/user-default-icon.png\",\"photo_normal\":\"https:\/\/www.15min.lt\/assets\/images\/user-default-icon.png\",\"staff\":false,\"bookmarks\":2,\"nb\":1}; remember_me=625936; device_token_625936=84c45e719fedc5949ced93ca0df54152\r\nUser-Agent: WindowsSockets2\r\n\r\n");

当我通过Winsock发送消息时,我使用的是char类型。

我需要将所有内容都转换为wchar_t *吗?但是如何将wchar_t *发送到服务器呢?还是我可以将此字符表示形式\ u0117更改为UTF8字符序列?任何帮助和评论都欢迎。

1 个答案:

答案 0 :(得分:0)

我建议将数据视为不透明的字节序列,即,将自定义数据转换为UTF-8字节,运行基数为64并将其用作cookie值。另请参阅:https://stackoverflow.com/a/49205256/696632。然后在接收器一侧进行相反的操作。对于不透明的字节数据,您可能需要unsigned char*