mirror of
				https://github.com/lightpanda-io/browser.git
				synced 2025-10-30 15:41:48 +00:00 
			
		
		
		
	use CURLOPT_COOKIE to set cookies
This commit is contained in:
		| @@ -319,6 +319,14 @@ fn makeRequest(self: *Client, handle: *Handle, transfer: *Transfer) !void { | ||||
|         var header_list = req.headers; | ||||
|         try conn.secretHeaders(&header_list); // Add headers that must be hidden from intercepts | ||||
|         try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_HTTPHEADER, header_list.headers)); | ||||
|  | ||||
|         // Add cookies. | ||||
|         // Clear cookies from Curl's engine. | ||||
|         try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_COOKIELIST, "ALL")); | ||||
|         if (header_list.cookies) |cookies| { | ||||
|             try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_COOKIE, cookies)); | ||||
|         } | ||||
|  | ||||
|         try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_PRIVATE, transfer)); | ||||
|     } | ||||
|  | ||||
| @@ -506,12 +514,11 @@ pub const RequestCookie = struct { | ||||
|             .is_http = self.is_http, | ||||
|             .is_navigation = self.is_navigation, | ||||
|             .origin_uri = self.origin, | ||||
|             .prefix = "Cookie: ", | ||||
|         }); | ||||
|  | ||||
|         if (arr.items.len > 0) { | ||||
|             try arr.append(temp, 0); //null terminate | ||||
|             try headers.add(@ptrCast(arr.items.ptr)); | ||||
|             headers.cookies = @ptrCast(arr.items.ptr); | ||||
|         } | ||||
|     } | ||||
| }; | ||||
|   | ||||
| @@ -204,6 +204,13 @@ pub const Connection = struct { | ||||
|         try self.secretHeaders(&header_list); | ||||
|         try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_HTTPHEADER, header_list.headers)); | ||||
|  | ||||
|         // Add cookies. | ||||
|         // Clear cookies from Curl's engine. | ||||
|         try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_COOKIELIST, "ALL")); | ||||
|         if (header_list.cookies) |cookies| { | ||||
|             try errorCheck(c.curl_easy_setopt(easy, c.CURLOPT_COOKIE, cookies)); | ||||
|         } | ||||
|  | ||||
|         try errorCheck(c.curl_easy_perform(easy)); | ||||
|         var http_code: c_long = undefined; | ||||
|         try errorCheck(c.curl_easy_getinfo(easy, c.CURLINFO_RESPONSE_CODE, &http_code)); | ||||
| @@ -216,11 +223,12 @@ pub const Connection = struct { | ||||
|  | ||||
| pub const Headers = struct { | ||||
|     headers: *c.curl_slist, | ||||
|     cookies: ?[*c]const u8, | ||||
|  | ||||
|     pub fn init() !Headers { | ||||
|         const header_list = c.curl_slist_append(null, "User-Agent: Lightpanda/1.0"); | ||||
|         if (header_list == null) return error.OutOfMemory; | ||||
|         return .{ .headers = header_list }; | ||||
|         return .{ .headers = header_list, .cookies = null }; | ||||
|     } | ||||
|  | ||||
|     pub fn deinit(self: *const Headers) void { | ||||
| @@ -245,6 +253,10 @@ pub const Headers = struct { | ||||
|             list.putAssumeCapacity(header.name, header.value); | ||||
|             current = node.*.next; | ||||
|         } | ||||
|         // special case for cookies | ||||
|         if (self.cookies) |v| { | ||||
|             list.putAssumeCapacity("Cookie", std.mem.span(@as([*:0]const u8, @ptrCast(v)))); | ||||
|         } | ||||
|         return list; | ||||
|     } | ||||
|  | ||||
| @@ -264,6 +276,10 @@ pub const Headers = struct { | ||||
|             num += 1; | ||||
|             current = node.*.next; | ||||
|         } | ||||
|         // special case for cookies | ||||
|         if (self.cookies != null) { | ||||
|             num += 1; | ||||
|         } | ||||
|         return num; | ||||
|     } | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pierre Tachoire
					Pierre Tachoire