{"id":27959317,"url":"https://github.com/happyhackingspace/funurl","last_synced_at":"2025-09-15T07:06:23.905Z","repository":{"id":289363140,"uuid":"942825229","full_name":"HappyHackingSpace/funURL","owner":"HappyHackingSpace","description":"A Functional URL Swiss Army Knife 🛠️","archived":false,"fork":false,"pushed_at":"2025-07-25T21:32:33.000Z","size":1950,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-26T04:45:21.911Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/HappyHackingSpace.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2025-03-04T18:28:08.000Z","updated_at":"2025-07-25T20:41:05.000Z","dependencies_parsed_at":"2025-05-29T20:09:38.701Z","dependency_job_id":"2eef2546-2fed-42f5-9cc5-4d91639d4d49","html_url":"https://github.com/HappyHackingSpace/funURL","commit_stats":null,"previous_names":["happyhackingspace/funurl"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/HappyHackingSpace/funURL","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HappyHackingSpace%2FfunURL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HappyHackingSpace%2FfunURL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HappyHackingSpace%2FfunURL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HappyHackingSpace%2FfunURL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HappyHackingSpace","download_url":"https://codeload.github.com/HappyHackingSpace/funURL/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HappyHackingSpace%2FfunURL/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275219760,"owners_count":25425941,"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","status":"online","status_checked_at":"2025-09-15T02:00:09.272Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2025-05-07T18:29:37.357Z","updated_at":"2025-09-15T07:06:23.893Z","avatar_url":"https://github.com/HappyHackingSpace.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://madewithlove.now.sh/af?text=Happy+Hackking+Space\" alt=\"Made with love in Happy Hackking Space\"\u003e\n\n# funURL\n\n\u003cimg src=\"img/image.png\"\u003e \u003cbr\u003e\nfunURL is a command-line tool designed as a Swiss Army knife for URLs. It takes a URL as input (via stdin, command-line flags, or arguments) and provides a range of operations for parsing, validation, modification, encoding/decoding, and handling URLs efficiently.\n\n## Requirements\n\n- Golang 1.18+\n\n## Installation\n`funURL` requires go1.18+ to install successfully. Run the following command to get the repo:\n```\ngo install -v github.com/HappyHackingSpace/funURL/cmd/funurl@main\n```\n\n## Features\n\n### URL Parsing\n\nExtract specific components from a URL:\n\n```bash\n# Parse all URL components\nfunURL parse https://subdomain.vulnerabletarget.com/path?query=value#fragment\n\n# Extract specific components\nfunURL parse -c https://vulnerabletarget.com     # Extract protocol/scheme\nfunURL parse -s https://subdomain.vulnerabletarget.com    # Extract subdomain\nfunURL parse -t https://vulnerabletarget.com     # Extract top-level domain\nfunURL parse -n https://vulnerabletarget.com     # Extract hostname\nfunURL parse -p https://vulnerabletarget.com/path    # Extract path\nfunURL parse -q https://vulnerabletarget.com/?key=value    # Extract query parameters\nfunURL parse -f https://vulnerabletarget.com/#section    # Extract fragments\n```\n\n### URL Modification\n\nAdd, remove, or update URL components:\n\n```bash\n# Change protocol\nfunURL modify -c https http://vulnerabletarget.com\n\n# Update path\nfunURL modify -p /new/path https://vulnerabletarget.com/old/path\n\n# Change query string\nfunURL modify -q \"key1=value1\u0026key2=value2\" https://vulnerabletarget.com?old=param\n\n# Update fragment\nfunURL modify -f \"new-section\" https://vulnerabletarget.com#old-section\n```\n\n### URL Encoding\n\nEncode URLs or URL components:\n\n```bash\n# Path-encode a URL\nfunURL encode \"hello world\"\n\n# Query component encoding\nfunURL encode -c \"param=value with spaces\"\n```\n\n### URL Decoding\n\nDecode URLs or URL components:\n\n```bash\n# Path-decode a URL\nfunURL decode \"hello%20world\"\n\n# Query component decoding\nfunURL decode -c \"param%3Dvalue%20with%20spaces\"\n```\n\n### Deduping Urls\n\n```bash\nfunURL dedupe https://google.com https://google.com/home?qs=value https://google.com/home?qs=secondValue https://google.com/home?qs=newValue\u0026secondQs=anotherValue https://google.com/home?qs=asd\u0026secondQs=das https://site.com/api/users/123 https://site.com/api/users/222 https://site.com/api/users/412/profile https://site.com/users/photos/photo.jpg https://site.com/users/photos/myPhoto.jpg https://site.com/users/photos/photo.png https://google.com/home/?q=2\u0026d=asd https://my.site/profile?param1=1\u0026param2=2 https://my.site/profile?param3=3\n\ncat urls.txt | funURL dedupe\n```\n\n## Input Methods\n\nfunURL supports multiple ways to provide input:\n\n1. Via command-line argument:\n   ```bash\n   funURL parse https://vulnerabletarget.com\n   ```\n\n2. Via the `--url` flag:\n   ```bash\n   funURL parse --url https://vulnerabletarget.com\n   ```\n\n3. Via standard input (pipe or interactive):\n   ```bash\n   echo \"https://vulnerabletarget.com\" | funURL parse\n   # Or\n   funURL parse  # Then type the URL and press Enter\n   ```\n\n## Examples\n\n```bash\n# Parse a URL and extract all components\nfunURL parse https://user:pass@sub.vulnerabletarget.com:8080/path/to/page?query=string#fragment\n\n# Encode a query parameter\nfunURL encode -c \"search=special chars: \u0026?=+\"\n\n# Decode a path component\nfunURL decode \"my%20encoded%20path\"\n\n# Change protocol and path in one command\nfunURL modify -c https -p /new/path http://vulnerabletarget.com/old\n```\n\n## Contributing\n\nHack! don't forget to follow [CONTRIBUTING](./CONTRIBUTING)\n\n---\n\n\u003cimg src=\"img/hhs.svg\" alt=\"Made with love in Happy Hackking Space\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhappyhackingspace%2Ffunurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhappyhackingspace%2Ffunurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhappyhackingspace%2Ffunurl/lists"}