gpt4 book ai didi

c - 如何在 C 中通过 libcurl 使用 cookie 和 postfields?

转载 作者:行者123 更新时间:2023-11-30 15:12:13 27 4
gpt4 key购买 nike

当我这样做的时候

curl --get --cookie-jar mycookie.cookie http://mypage/page/

它将把 cookie 存储为 mycookie.cookie

然后当我这样做时

curl --cookie mycookie.cookie --data "field1=field1" --data "field2=field2" --data csrfmiddlewaretoken=(csrf token) http://mypage/page/register/

csrf token 我通过猫 mycookie.cookie 获取并手动填写。

这有效。它做我想要的。

所以现在我想使用 libcurl 和 C 来执行此操作。按照文档我有这个:

  CURL *curl;
CURLcode res;

curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {

curl_easy_setopt(curl, CURLOPT_URL, http://mypage/page/);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
res = curl_easy_perform(curl);

res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);

curl_easy_setopt(curl, CURLOPT_URL, http://mypage/page/register/);

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookies);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "field1=field1;field1=field1;csrfmiddlewaretoken=(csrf token)");

res = curl_easy_perform(curl);


printf("Erasing curl's knowledge of cookies!\n");
curl_easy_setopt(curl, CURLOPT_COOKIELIST, "ALL");
curl_slist_free_all(cookies);
}
curl_global_cleanup();
return 0;

因此这将传递 cookie,但会因缺少字段而引发错误。所以我认为这一行会发布所有字段:

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "field1=field1;field1=field1;csrfmiddlewaretoken=(csrf token)");

我还尝试通过此行传递所有字段:

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookies);

通过使用字符数组中的所有内容

我还尝试用 ; 替换 , 但没有任何效果。

我不认为我写错了什么,它看起来更像是帖子互相覆盖,因为如果我在没有 COOKIEFILE 行的情况下运行程序,它会说缺少 cookie。

知道如何发布所有必要的信息吗?

编辑

好的,我通过这两篇文章就可以了 herehere和丹尼尔·斯坦伯格

所以我有相同的代码,只是没有

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookies);

最佳答案

  1. 发送到 CURLOPT_POSTFIELDS 的字符串与命令行使用的字符串不同!当您多次使用 --data 时,curl 会在字符串之间使用与号 (&) 连接字符串,而您的 C 代码则使用分号。

  2. 您向 CURLOPT_COOKIEFILE 传递了错误的输入。它接受一个文件名,不接受其他任何内容。但是您不需要在第二个请求中使用该选项,因为您在第一个请求中启用了“cookie 引擎”,第一个请求中收到的所有 cookie 都保留在curl句柄中,并且无论如何都会在后续请求中使用重复使用 handle 时。

  3. 要提取 csrf_token cookie,您可以使用 CURLINFO_COOKIELIST 并解析 cookie 列表以找到它,提取内容并在随后的 POST 请求。

关于c - 如何在 C 中通过 libcurl 使用 cookie 和 postfields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com