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

How do I pass cookies on a CURL redirect?

1个答案

1

When using CURL for HTTP requests, handling cookies is a common requirement for tracking sessions and maintaining user state. When dealing with redirects, it is particularly important to ensure that cookies are correctly passed across multiple requests. Below, I will introduce how to handle cookie passing during redirects in CURL.

First, CURL does not automatically handle cookies by default; you need to manually configure certain options to manage cookies. Especially when dealing with redirects, CURL must be configured to ensure cookies are correctly passed along the redirect chain.

You need to first instruct CURL to start a new cookie session, which can be achieved by setting the CURLOPT_COOKIEFILE option to an empty string. This causes CURL to maintain cookies in memory rather than reading from a file.

c
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); // Enable cookie handling

Step 2: Enable Redirects

By default, CURL does not automatically follow HTTP redirects. You need to set CURLOPT_FOLLOWLOCATION to 1 to enable automatic redirects.

c
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // Enable automatic redirects

Step 3: Save and Use Cookies During Redirects

To have CURL send the appropriate cookies during redirects, you also need to set CURLOPT_COOKIEJAR. Even if you do not intend to save cookies to a file, you can set this option to an empty string. With this option set, CURL will handle cookies in memory and use them in subsequent requests.

c
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, ""); // Maintain cookies in memory

Example Code

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, ""); // Enable cookie handling curl_easy_setopt(curl, CURLOPT_COOKIEJAR, ""); // Maintain cookies in memory 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; }

In this code snippet, we configure CURL to handle cookies and HTTP redirects. This ensures that cookies are correctly passed even when redirects occur.

Using this approach, you can ensure that the cookie state is properly maintained when using CURL for HTTP requests and handling redirects. This is particularly important for HTTP requests that require handling login authentication or session tracking.

2024年8月12日 14:02 回复

你的答案