{"id":22619587,"url":"https://github.com/davemolk/fuzzyhelpers","last_synced_at":"2025-07-07T08:05:58.598Z","repository":{"id":154089051,"uuid":"631426104","full_name":"davemolk/fuzzyHelpers","owner":"davemolk","description":"add browser headers (chrome or firefox) to your requests (plus other helpful utils)","archived":false,"fork":false,"pushed_at":"2023-05-02T11:46:59.000Z","size":16,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T01:47:16.910Z","etag":null,"topics":["browser-emulation","go","golang","headers","infosec","pentesting","pentesting-tools","recon","research","security"],"latest_commit_sha":null,"homepage":"","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/davemolk.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}},"created_at":"2023-04-23T01:39:41.000Z","updated_at":"2024-01-10T10:07:20.000Z","dependencies_parsed_at":"2023-05-14T01:45:15.795Z","dependency_job_id":null,"html_url":"https://github.com/davemolk/fuzzyHelpers","commit_stats":{"total_commits":10,"total_committers":2,"mean_commits":5.0,"dds":0.09999999999999998,"last_synced_commit":"a3d74db4b50b5378e828715e6c0e56f2a27b429f"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/davemolk/fuzzyHelpers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemolk%2FfuzzyHelpers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemolk%2FfuzzyHelpers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemolk%2FfuzzyHelpers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemolk%2FfuzzyHelpers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/davemolk","download_url":"https://codeload.github.com/davemolk/fuzzyHelpers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/davemolk%2FfuzzyHelpers/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259777919,"owners_count":22909753,"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":["browser-emulation","go","golang","headers","infosec","pentesting","pentesting-tools","recon","research","security"],"created_at":"2024-12-08T22:06:32.115Z","updated_at":"2025-06-14T07:38:19.322Z","avatar_url":"https://github.com/davemolk.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fuzzyHelpers\n* provides request headers that mimic chrome and firefox\n* provides a client with helpful defaults for fuzzing a site\n\n# installation\n`go get github.com/davemolk/fuzzyHelpers@latest`\n\n# basic usage\n```\nurl := \"https://example.com\"\nreq, err := http.NewRequestWithContext(ctx, \"GET\", url, nil)\nif err != nil {\n    return err\n}\nreq.Header = fuzzyHelpers.Headers()\nresp, err := fuzzyHelpers.Client().Do(req)\n```\n\n# using options to customize behavior\n```\nurl := \"https://example.com\"\nreq, err := http.NewRequestWithContext(ctx, \"GET\", url, nil)\nif err != nil {\n    return err\n}\n\n// pass in options\nh := fuzzyHelpers.NewHeaders(\n    // will generate a linux, mac, or windows ua and\n    // matching \"sec-ch-ua-platform\" header if returning\n    // a set of chrome headers\n    fuzzyHelpers.WithOS(\"any\"),\n    // will include a \"Host\" header derived from url\n    fuzzyHelpers.WithURL(url),\n    // include custom header(s) as space-separated key=value\n    // below gives the famous 'foo' and 'go' headers \n    // with values 'bar' and 'pher', respectively\n    fuzzyHelpers.WithCustomHeaders(\"foo=bar go=pher\"),\n)\n\n// call Headers to generate (will choose chrome or firefox randomly\n// unless specified by you via ChromeOnly or FirefoxOnly options)\nreq.Header = h.Headers()\n\nc := fuzzyHelpers.NewClient(\n    // maybe we want to send through burp suite, for instance\n    fuzzyHelpers.WithProxy(\"http://127.0.0.1:8080\"),\n    // set a timeout via client if you're not using\n    // context.WithTimeout\n    fuzzyHelpers.WithTimeout(15000),\n)\nresp, err := c.Do(req)\netc...\n```\n### headers defaults\n```\nfirefox\n    User-Agent = a random ua\n    Accept = text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n    Accept-Language: en-US,en;q=0.5\n    DNT = 1\n    Connection = keep-alive\n    Upgrade-Insecure-Requests = 1\n    Sec-Fetch-Dest = document\n    Sec-Fetch-Mode = navigate\n    Sec-Fetch-Site = none\n    Sec-Fetch-User = ?1\n    Sec-GCP = 1\n\nchrome\n    Connection = keep-alive\n    Cache-Control = max-age=0\n    sec-ch-ua = \"Not A;Brand\";v=\"99\", \"Chromium\";v=\"99\", \"Google Chrome\";v=\"99\"\n    sec-ch-ua-mobile = ?0\n    sec-ch-ua-platform = Linux, Macintosh, or Windows, depending on your input\n    Upgrade-Insecure-Requests = 1\n    User-Agent = a random ua\n    Accept = text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\n    Sec-Fetch-Site = none\n    Sec-Fetch-Mode = navigate\n    Sec-Fetch-User = ?1\n    Sec-Fetch-Dest = document\n    Accept-Language = en-US,en;q=0.5\n```\n### client defaults\n```\nfuzzyHelpers provides a client with the following customized defaults\n    MaxIdleConnsPerHost = 30\n    MaxConnsPerHost = 30\n    InsecureSkipVerify = true\n    Timeout = 10000*time.Millisecond\n    CheckRedirect = func(req *http.Request, via []*http.Request) error {\n                        return http.ErrUseLastResponse\n                    }\n```\n### possible user-supplied options\n```\nheader options:\n  WithOS\n    \tused in \"sec-ch-ua-platform\" chrome header\n        possible values are \"l, m, w, or any\"\n        \"any\" will select randomly between l, m, and w\n        default value is \"w\" \n  WithCustomHeaders\n        include custom header(s) as space-separated key=value\n        e.g. WithCustomHeaders(\"foo=bar go=pher\")\n        giving 'foo' and 'go' headers the values 'bar' and 'pher'.\n        note: custom headers are not overwritten by default values\n  SuppressHeaders\n        include space-separated header(s) to suppress from request\n  WithURL\n        include the request url for fuzzyHelper to set the Host header\n  ChromeOnly\n        only use chrome headers\n  FirefoxOnly\n        only use firefox headers\n\nclient options\n  WithConnections\n    \tsets MaxIdleConnsPerHost and MaxConnsPerHost\n        try entering your number of concurrent requests\n  WithNoSkip\n    \tpass in true if you want InsecureSkipVerify = false\n  WithProxy\n    \tpass in a proxy\n  WithAllowedRedirects\n    \tpass in true if you want to allow redirects\n  WithTimeout\n        measured in ms\n```\n### note\nGo unfortunately doesn't preserve header order, so if that's important to you and what you're up to, you'll need to look elsewhere. Think of these headers as a starting point -- certainly better than nothing, but not a magic bullet.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavemolk%2Ffuzzyhelpers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdavemolk%2Ffuzzyhelpers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdavemolk%2Ffuzzyhelpers/lists"}