乐闻世界logo
搜索文章和话题

How do I pass cookies on a CURL redirect?

4 个月前提问
4 个月前修改
浏览次数14

1个答案

1

在使用CURL进行HTTP请求时,处理Cookie是跟踪会话和保持用户状态的常见需求。当涉及到重定向时,确保Cookie在多个请求间正确传递尤为重要。下面我将介绍如何在CURL中处理重定向时的Cookie传递问题。

首先,CURL默认是不会自动处理Cookie的,你需要手动设置一些选项来管理Cookie。特别是在涉及到重定向时,CURL需要配置以确保Cookie可以沿着重定向链正确传递。

步骤1: 开启CURL的Cookie会话

你需要首先告诉CURL启动一个新的Cookie会话,这可以通过设置CURLOPT_COOKIEFILE选项为空字符串实现。这样CURL会在内存中维护Cookie而不是从文件中读取。

c
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");

步骤2: 启用重定向

默认情况下,CURL不会自动遵循HTTP重定向。你需要设置CURLOPT_FOLLOWLOCATION为1来启用自动重定向。

c
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

步骤3: 保存并在重定向中使用Cookie

要让CURL在发生重定向时发送相应的Cookie,你还需要设置CURLOPT_COOKIEJAR。即使你不打算把Cookie保存到文件中,也可以设置这个选项为一个空字符串。设置了这个选项,CURL会在内存中处理Cookie,并在随后的请求中使用它们。

c
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "");

示例代码

c
#include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); // 启动Cookie处理 curl_easy_setopt(curl, CURLOPT_COOKIEJAR, ""); // 在内存中维护Cookie res = curl_easy_perform(curl); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); } return 0; }

在这段代码中,我们设置了CURL以处理Cookie和HTTP重定向。这样确保了即使在重定向发生时,Cookie也会被正确传递。

使用这种方式,你可以确保在使用CURL进行HTTP请求并处理重定向时,Cookie的状态被正确维持。这对于需要处理登录认证或会话跟踪的HTTP请求尤其重要。

2024年8月12日 14:02 回复

你的答案