fhttp is a fork of net/http that provides an array of features pertaining to the fingerprint of the golang http client.

fhttp

The f stands for flex. fhttp is a fork of net/http that provides an array of features pertaining to the fingerprint of the golang http client. Through these changes, the http client becomes much more flexible, and when combined with transports such as uTLS can mitigate servers from fingerprinting requests and see that it is made by golang, making them look like they originate from a regular chrome browser.

Documentation can be contributed, otherwise, look at tests and examples. The main one should be example_client_test.go.

Features

Ordered Headers

Allows for pseudo header order and normal header order. Most of the code is taken from this pr.

Connection settings (TODO)

Has Chrome-like connection settings:

SETTINGS_HEADER_TABLE_SIZE = 65536
SETTINGS_ENABLE_PUSH = 1
SETTINGS_MAX_CONCURRENT_STREAMS = 1000
SETTINGS_INITIAL_WINDOW_SIZE = 6291456
SETTINGS_MAX_FRAME_SIZE = 16384
SETTINGS_MAX_HEADER_LIST_SIZE = 262144

gzip, deflate, br encoding (TODO)

Actually supports and implements encoding gzip, deflate, br

Pseudo header order

Supports pseudo header order for http2 to mitigate fingerprinting. Read more about it here

Backward compatible with net/http

Although this library is an extension of net/http, it is also meant to be backward compatible. Replacing

import (
	"net/http"
)

with

import (
	http "github.com/zMrKrabz/fhttp"
)

SHOULD not break anything.

Owner
Flexagon
College student coding as a hobby. Have experience with NodeJS, Python, and Go.
Flexagon
Comments
  • Cannot use req as type

    Cannot use req as type

    Replaced "net/http" with http "github.com/zMrKrabz/fhttp"

     cannot use req (type *"github.com/zMrKrabz/fhttp".Request) as type *"net/http".Request in argument to h2clientConn.RoundTrip
    

    nvm just had to replace all imports in net

  • Http2 migrate

    Http2 migrate

    • Headers and pseudo headers are now implemented and edited in the http2 folder
    • Setting connections implementation have changed, customizable initial window size and header table size are transport settings
    • Push enabler implemented to an extent, there are still bugs that are mentioned in CONTRIBUTING.md that needs to be fixed. Because the changes do not give out any errors and the original request goes through fine and the client isn't cancelling the streams, I count that as acceptable.
  • Fix spelling

    Fix spelling

    I fixed a couple of meaningless typos without changing the capitalization of any word as I assumed that to be a voluntary stylistic choice. Yes, I'm extremely bored.

  • The uppercase is forced at the start of every words for the key header

    The uppercase is forced at the start of every words for the key header

    I can understand if you don't want to change this one, because of the RFC, but I think it should be the user to decide if they want to follow this norm or not.

  • Being able to chose the position of User-Agent

    Being able to chose the position of User-Agent

    As the title says, as you can see in the screens that I will give under, you can't select the position of the UA for the headers:

    image (json send to the function)

    image (map used for http.HeaderOrderKey)

    image (Result in burp)

Related tags
Simple HTTP package that wraps net/http

Simple HTTP package that wraps net/http

Jan 17, 2022
A net.http.Handler similar to FileServer that serves gzipped content

net.http.handler.gzip: a FileServer that serves gzipped content. Usage: import "net/http/handler/gzip" base := "/path/to/website/static/files" http

Mar 14, 2022
retryablehttp package provides a familiar HTTP client interface with automatic retries and exponential backoff.

retryablehttp package provides a familiar HTTP client interface with automatic retries and exponential backoff.

Jan 4, 2023
Http client call for golang http api calls

httpclient-call-go This library is used to make http calls to different API services Install Package go get

Oct 7, 2022
An enhanced http client for Golang
An enhanced http client for Golang

go-http-client An enhanced http client for Golang Documentation on go.dev ?? This package provides you a http client package for your http requests. Y

Dec 23, 2022
http client for golang
http client for golang

Request HTTP client for golang, Inspired by Javascript-axios Python-request. If you have experience about axios or requests, you will love it. No 3rd

Dec 18, 2022
A nicer interface for golang stdlib HTTP client

rq A nicer interface for golang stdlib HTTP client Documents rq: here client: here jar: here Why? Because golang HTTP client is a pain in the a... Fea

Dec 12, 2022
Declarative golang HTTP client

go-req Declarative golang HTTP client package req_test

Dec 20, 2022
Advanced HTTP client for golang.

go-request Advanced HTTP client for golang. Installation go get github.com/mingming-cn/go-request Usage import ( "github.com/mingming-cn/go-reque

Nov 22, 2021
Full-featured, plugin-driven, extensible HTTP client toolkit for Go

gentleman Full-featured, plugin-driven, middleware-oriented toolkit to easily create rich, versatile and composable HTTP clients in Go. gentleman embr

Dec 23, 2022
An enhanced HTTP client for Go
An enhanced HTTP client for Go

Heimdall Description Installation Usage Making a simple GET request Creating a hystrix-like circuit breaker Creating a hystrix-like circuit breaker wi

Jan 9, 2023
Enriches the standard go http client with retry functionality.

httpRetry Enriches the standard go http client with retry functionality using a wrapper around the Roundtripper interface. The advantage of this libra

Dec 10, 2022
Simple HTTP and REST client library for Go

Resty Simple HTTP and REST client library for Go (inspired by Ruby rest-client) Features section describes in detail about Resty capabilities Resty Co

Jan 1, 2023
A Go HTTP client library for creating and sending API requests
A Go HTTP client library for creating and sending API requests

Sling Sling is a Go HTTP client library for creating and sending API requests. Slings store HTTP Request properties to simplify sending requests and d

Jan 7, 2023
a Go HTTP client with timeouts

go-httpclient requires Go 1.1+ as of v0.4.0 the API has been completely re-written for Go 1.1 (for a Go 1.0.x compatible release see 1adef50) Provides

Nov 10, 2022
GoRequest -- Simplified HTTP client ( inspired by nodejs SuperAgent )
GoRequest -- Simplified HTTP client ( inspired by nodejs SuperAgent )

GoRequest GoRequest -- Simplified HTTP client ( inspired by famous SuperAgent lib in Node.js ) "Shooting Requests like a Machine Gun" - Gopher Sending

Jan 1, 2023
gout to become the Swiss Army Knife of the http client @^^@---> gout 是http client领域的瑞士军刀,小巧,强大,犀利。具体用法可看文档,如使用迷惑或者API用得不爽都可提issues
gout to become the Swiss Army Knife of the http client @^^@--->  gout 是http client领域的瑞士军刀,小巧,强大,犀利。具体用法可看文档,如使用迷惑或者API用得不爽都可提issues

gout gout 是go写的http 客户端,为提高工作效率而开发 构架 feature 支持设置 GET/PUT/DELETE/PATH/HEAD/OPTIONS 支持设置请求 http header(可传 struct,map,array,slice 等类型) 支持设置 URL query(可

Dec 29, 2022
Retry, Race, All, Some, etc strategies for http.Client calls

reqstrategy Package reqstrategy provides functions for coordinating http.Client calls. It wraps typical call strategies like making simultaneous reque

Apr 30, 2021
An enhanced HTTP client for Go
An enhanced HTTP client for Go

Heimdall Description Installation Usage Making a simple GET request Creating a hystrix-like circuit breaker Creating a hystrix-like circuit breaker wi

Jan 2, 2023