c - 如何使用糟糕的 Windows 套接字在 https GET 请求中发送包含 unicode 字符的 cookie
问题描述
我正在创建 win32 应用程序,并使用一个特定的站点。从以前的请求中,我提取了一些 cookie,我想实现它们。但问题是,其中一个 cookie 包含 unicode 字母(latyn 小写字母 e,上面带有点;ASCII 表中的 279)。它是唯一一个 url 编码的 cookie。解码时,我得到 char \u0117 并且 Visual Studio 编译器警告我它是 unicode char 并将其视为?标记。
这是 url 编码的 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=/
这是 url 解码的 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 字符序列?欢迎任何帮助和评论。
解决方案
我建议将数据视为不透明的字节序列,即将自定义数据转换为 UTF-8 字节,运行 base 64 并将其用作 cookie 值。另请参阅:https ://stackoverflow.com/a/49205256/696632 。然后在接收端反向操作。您可能需要unsigned char*
不透明的字节数据。
推荐阅读
- javascript - javascript块背后的魔力是什么?
- java - Java:JFrame图像仅在最大化窗口时出现
- python - 如何使用 pymongo 迭代带有嵌入式文档的 mongo 文档?
- postgresql - 如何使用 jdbc 为 postgresql 的位列插入值
- python - LeetCode 700. 在二叉搜索树中搜索
- java - 范围在 for 循环之外的变量自动将值更改为 0
- php - PHP连接数据库得到错误连接错误:SQLSTATE [HY000] [2002] php_network_getaddresses
- javascript - 状态为空,甚至设置了数据
- node.js - Node.js 服务器和 Mongoose 连接不起作用
- machine-learning - 使用 cross_val_score() 的正确方法是什么