--- warning: DO NOT CHANGE THIS MANUALLY, THIS IS GENERATED BY https://github.com/duckdb/community-extensions repository, check README there title: http_request excerpt: | DuckDB Community Extensions HTTP client extension for DuckDB with GET/POST/PUT/PATCH/DELETE and byte-range requests extension: name: http_request description: HTTP client extension for DuckDB with GET/POST/PUT/PATCH/DELETE and byte-range requests version: '2026102301' language: C++ build: cmake license: MIT excluded_platforms: "windows_amd64_mingw" maintainers: - onnimonni repo: github: midwork-finds-jobs/duckdb_http_request andium: d4ad6fb9728b637996de4e23e0afcaf89b5140b4 variegata: 1c0324d3749d7b2d82fbf35b289cd2ca4da62934 ref: 319d8af27df8868593068f8698e168f8ac9ac44b docs: hello_world: | -- Simple GET request SELECT http_get('https://example.com/'); -- Access response fields SELECT r.status, r.content_type, r.content_length, r.cookies[1].name as first_cookie FROM (SELECT http_get('https://example.com/') as r); -- GET with custom headers SELECT http_get('https://httpbin.org/get', headers := {'Accept': 'application/json'}).body; -- Byte-range request for partial content SELECT http_get( 'https://example.com/largefile.gz', {'Range': byte_range(0, 1024)} ); extended_description: | HTTP client extension providing scalar and table functions for making HTTP requests. Features: - All HTTP methods: GET, HEAD, POST, PUT, PATCH, DELETE - Parallel execution: requests within a chunk run concurrently - Custom headers via STRUCT parameter - Query parameters via STRUCT - Byte-range requests with helper function - Auto-decompression of gzip/zstd responses - Form-encoded POST with http_post_form() - Multipart/form-data uploads with http_post_multipart() - Parsed Set-Cookie headers into structured cookies array - Convenience fields: content_type, content_length - Respects duckdb http and proxy settings - Configurable concurrency via http_max_concurrency setting (default: 32) - Global User-Agent override via http_user_agent setting - Request caching to prevent duplicate requests (http_request_cache setting) - Headers support both STRUCT and MAP syntax - Redirect control via http_follow_redirects setting (default: true) - HTTP_HEADERS type with case-insensitive [] access (headers['Content-Type'] = headers['content-type']) Uses DuckDB's built-in httplib for HTTP connections. extension_star_count: 4 extension_star_count_pretty: 4 extension_download_count: 680 extension_download_count_pretty: 680 image: '/images/community_extensions/social_preview/preview_community_extension_http_request.png' layout: community_extension_doc --- ### Compatibility Matrix This table covers all DuckDB releases that have not reached [end-of-life](https://duckdb.org/release_calendar), including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.
| Platform | 1.4.4 | 1.4.5 | 1.5.5 | 1.5.6 | 2.0.0 | | :--- | :---: | :---: | :---: | :---: | :---: | | Linux AMD64 | ✅ | ❌ | ❌ | ❌ | ✅ | | Linux ARM64 | ✅ | ❌ | ❌ | ❌ | ✅ | | macOS AMD64 | ✅ | ❌ | ❌ | ❌ | ✅ | | macOS ARM64 | ✅ | ❌ | ❌ | ❌ | ✅ | | Windows AMD64 | ✅ | ❌ | ❌ | ❌ | ✅ | | Windows ARM64 | ❌ | ❌ | ❌ | ❌ | ❌ | | WebAssembly | ✅ | ❌ | ❌ | ❌ | ✅ | ### Installing and Loading ```sql INSTALL {{ page.extension.name }} FROM community; LOAD {{ page.extension.name }}; ``` {% if page.docs.hello_world %} ### Example ```sql {{ page.docs.hello_world }}``` {% endif %} {% if page.docs.extended_description %} ### About {{ page.extension.name }} {{ page.docs.extended_description }} {% endif %} ### Added Functions | function_name | function_type | description | comment | examples | |---------------------|---------------|-------------|---------|----------| | byte_range | scalar | NULL | NULL | | | http_delete | scalar | NULL | NULL | | | http_delete | table | NULL | NULL | | | http_get | scalar | NULL | NULL | | | http_get | table | NULL | NULL | | | http_head | scalar | NULL | NULL | | | http_head | table | NULL | NULL | | | http_patch | scalar | NULL | NULL | | | http_patch | table | NULL | NULL | | | http_post | scalar | NULL | NULL | | | http_post | table | NULL | NULL | | | http_post_form | scalar | NULL | NULL | | | http_post_form | table | NULL | NULL | | | http_post_multipart | scalar | NULL | NULL | | | http_post_multipart | table | NULL | NULL | | | http_put | scalar | NULL | NULL | | | http_put | table | NULL | NULL | | | http_range_header | scalar | NULL | NULL | | ### Overloaded Functions | function_name | function_type | description | comment | examples | |-------------------|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|---------------------------------------------------| | map_extract_value | scalar | Returns the value for a given key or NULL if the key is not contained in the map. The type of the key provided in the second parameter must match the type of the map’s keys else an error is returned | NULL | [map_extract_value(map(['key'], ['val']), 'key')] | ### Added Types | type_name | type_size | logical_type | type_category | internal | |--------------|----------:|--------------|---------------|----------| | HTTP_HEADERS | 16 | MAP | COMPOSITE | true | ### Added Settings | name | description | input_type | scope | aliases | typed_value | |-----------------------|-----------------------------------------------------------------------------------|------------|--------|---------|-------------| | http_follow_redirects | Automatically follow HTTP redirects (default: true) | BOOLEAN | GLOBAL | [] | true | | http_max_concurrency | Maximum number of concurrent HTTP requests per scalar function call (default: 32) | UBIGINT | GLOBAL | [] | 32 | | http_request_cache | Cache HTTP responses within query to prevent duplicate requests (default: true) | BOOLEAN | GLOBAL | [] | true | | http_user_agent | Custom User-Agent header for all HTTP requests (default: DuckDB) | VARCHAR | GLOBAL | [] | | | temp_directory | Set the directory to which temporary files are written. | VARCHAR | GLOBAL | [] | post.db.tmp |