{"id":22568173,"url":"https://github.com/rekgrpth/pg_curl","last_synced_at":"2025-05-11T14:14:08.471Z","repository":{"id":63758228,"uuid":"177939155","full_name":"RekGRpth/pg_curl","owner":"RekGRpth","description":"PostgreSQL tool for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.","archived":false,"fork":false,"pushed_at":"2025-03-25T15:34:35.000Z","size":715,"stargazers_count":63,"open_issues_count":2,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-11T14:14:01.783Z","etag":null,"topics":["c","curl","postgres"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RekGRpth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-27T07:17:41.000Z","updated_at":"2025-04-21T21:38:34.000Z","dependencies_parsed_at":"2025-01-26T16:23:19.584Z","dependency_job_id":"48508467-6ec4-4e33-b416-24650abaa9e9","html_url":"https://github.com/RekGRpth/pg_curl","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RekGRpth%2Fpg_curl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RekGRpth%2Fpg_curl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RekGRpth%2Fpg_curl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RekGRpth%2Fpg_curl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RekGRpth","download_url":"https://codeload.github.com/RekGRpth/pg_curl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253576276,"owners_count":21930172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","curl","postgres"],"created_at":"2024-12-08T00:11:48.607Z","updated_at":"2025-05-11T14:14:08.395Z","avatar_url":"https://github.com/RekGRpth.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"PostgreSQL tool for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.\n\n# http get\n```sql\nCREATE OR REPLACE FUNCTION get(url TEXT) RETURNS TEXT LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        curl_easy_setopt_url(url),\n        curl_easy_perform(),\n        curl_easy_getinfo_data_in()\n    ) SELECT convert_from(curl_easy_getinfo_data_in, 'utf-8') FROM s;\n$BODY$;\n```\n\n# http urlencoded form post\n```sql\nCREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        ( WITH s AS (\n            SELECT (json_each_text(request)).*\n        ) SELECT array_agg(curl_postfield_append(key, value)) FROM s),\n        curl_easy_setopt_url(url),\n        curl_easy_perform(),\n        curl_easy_getinfo_data_in()\n    ) SELECT convert_from(curl_easy_getinfo_data_in, 'utf-8') FROM s;\n$BODY$;\n```\n\n# http multipart/form-data form post\n```sql\nCREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        ( WITH s AS (\n            SELECT (json_each_text(request)).*\n        ) SELECT array_agg(curl_mime_data(value, name:=key)) FROM s),\n        curl_easy_setopt_url(url),\n        curl_easy_perform(),\n        curl_easy_getinfo_data_in()\n    ) SELECT convert_from(curl_easy_getinfo_data_in, 'utf-8') FROM s;\n$BODY$;\n```\n\n# http json post\n```sql\nCREATE OR REPLACE FUNCTION post(url TEXT, request JSON) RETURNS TEXT LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        curl_easy_setopt_postfields(convert_to(request::TEXT, 'utf-8')),\n        curl_easy_setopt_url(url),\n        curl_header_append('Content-Type', 'application/json; charset=utf-8'),\n        curl_easy_perform(),\n        curl_easy_getinfo_data_in()\n    ) SELECT convert_from(curl_easy_getinfo_data_in, 'utf-8') FROM s;\n$BODY$;\n```\n\n# email\n```sql\nCREATE OR REPLACE FUNCTION email(url TEXT, username TEXT, password TEXT, subject TEXT, sender TEXT, recipient TEXT, body TEXT, type TEXT) RETURNS TEXT LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        curl_easy_setopt_mail_from(sender),\n        curl_easy_setopt_password(password),\n        curl_easy_setopt_url(url),\n        curl_easy_setopt_username(username),\n        curl_header_append('From', sender),\n        curl_header_append('Subject', subject),\n        curl_header_append('To', recipient),\n        curl_mime_data(body, type:=type),\n        curl_recipient_append(recipient),\n        curl_easy_perform(),\n        curl_easy_getinfo_header_in()\n    ) SELECT curl_easy_getinfo_header_in FROM s;\n$BODY$;\n```\n\n# ftp upload\n```sql\nCREATE OR REPLACE FUNCTION upload(url TEXT, username TEXT, password TEXT, file BYTEA) RETURNS TEXT LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        curl_easy_setopt_password(password),\n        curl_easy_setopt_readdata(file),\n        curl_easy_setopt_url(url),\n        curl_easy_setopt_username(username),\n        curl_easy_perform(),\n        curl_easy_getinfo_header_in()\n    ) SELECT curl_easy_getinfo_header_in FROM s;\n$BODY$;\n```\n# ftp download\n```sql\nCREATE OR REPLACE FUNCTION download(url TEXT, username TEXT, password TEXT) RETURNS BYTEA LANGUAGE SQL AS $BODY$\n    WITH s AS (SELECT\n        curl_easy_reset(),\n        curl_easy_setopt_password(password),\n        curl_easy_setopt_url(url),\n        curl_easy_setopt_username(username),\n        curl_easy_perform(),\n        curl_easy_getinfo_data_in()\n    ) SELECT curl_easy_getinfo_data_in FROM s;\n$BODY$;\n```\n\n# convert http headers to table\n```sql\nWITH s AS (\n    SELECT regexp_matches(curl_easy_getinfo_header_in(), E'([^ \\t\\r\\n\\f]+): ?([^\\t\\r\\n\\f]+)', 'g') AS s\n) SELECT s[1] AS key, s[2] AS value FROM s;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frekgrpth%2Fpg_curl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frekgrpth%2Fpg_curl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frekgrpth%2Fpg_curl/lists"}