c - 如何使用糟糕的Windows套接字在https GET请求中发送包含unicode字符的cookie

标签 c

我正在创建 win32 应用程序,并且使用一个特定的站点。从之前的请求中,我提取了一些 cookie,我想实现它们。但问题是,其中一个 cookie 包含 unicode 字母(拉丁文小写字母 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* 作为不透明字节数据。

关于c - 如何使用糟糕的Windows套接字在https GET请求中发送包含unicode字符的cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56842527/

相关文章:

c - "make"编译写在 "cc ex1.c -o ex1"文件中的代码,为什么我们使用 "exe1.c"命令

c - 如何在 if 语句中的条件下创建宏

c - 返回码误解

c++ - 指向另一个结构的结构指针成员会导致段错误 (C/C++)

c - C语言如何计算运行时间

c - 声明结构 : typedef struct name name;

c中的char到int转换错误

c - 解决迷宫回溯

C:将 char* 附加到 char**

c - 逗号运算符 , 的作用是什么?