An open API service indexing awesome lists of open source software.

https://github.com/Noooste/azuretls-client

An easy-to-use HTTP client to spoof TLS/JA3, HTTP2 and HTTP3 fingerprint
https://github.com/Noooste/azuretls-client

golang http http-client http2 http3 http3-client ja3 ja3-fingerprint ssl-pinning tls tls-client

Last synced: about 2 months ago
JSON representation

An easy-to-use HTTP client to spoof TLS/JA3, HTTP2 and HTTP3 fingerprint

Awesome Lists containing this project

README

          

# AzureTLS Client
[![GoDoc](https://godoc.org/github.com/Noooste/azuretls-client?status.svg)](https://godoc.org/github.com/Noooste/azuretls-client)
[![codecov](https://codecov.io/gh/Noooste/azuretls-client/graph/badge.svg?token=XGHX707RK6)](https://codecov.io/gh/Noooste/azuretls-client)
[![build](https://github.com/Noooste/azuretls-client/actions/workflows/push.yml/badge.svg)](https://github.com/Noooste/azuretls-client/actions/workflows/push.yml)
[![Go Report Card](https://goreportcard.com/badge/Noooste/azuretls-client)](https://goreportcard.com/report/Noooste/azuretls-client)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/Noooste/azuretls-client/blob/master/LICENSE)

## ๐Ÿš€ Simple, Powerful HTTP Client for Go

AzureTLS Client is a high-performance HTTP client library for Go that combines **simplicity** with **unlimited customization**. Whether you're building a simple API client or need advanced features like TLS fingerprinting and HTTP/2 customization, AzureTLS Client has you covered.

### โœจ Why Choose AzureTLS Client?

**๐ŸŽฏ Simple by Default**
```go
session := azuretls.NewSession()
response, err := session.Get("https://www.google.com/")
if err != nil {
panic(err)
}
fmt.Println(response.String())
```

**โšก Powerful When Needed**
- Full TLS fingerprint control (JA3/JA4)
- HTTP/2 and HTTP/3 support with custom settings
- Advanced proxy support (HTTP/HTTPS/SOCKS5)
- Proxy chain support for multi-hop connections
- Precise header ordering and control

## ๐ŸŒŸ Key Features

- **๐ŸŒ Modern Protocols** - HTTP/1.1, HTTP/2, and HTTP/3 support
- **๐Ÿ”ง TLS Fingerprinting** - Full control over ClientHello (JA3/JA4)
- **๐ŸŽญ Browser Emulation** - Chrome, Firefox, Safari, Edge presets
- **๐Ÿ”— Advanced Proxy Support** - HTTP, HTTPS, SOCKS4, SOCKS5 with authentication.
- **โ›“๏ธ Proxy Chaining** - Multi-hop proxy connections for enhanced anonymity
- **๐Ÿ“‹ Header Control** - Precise ordering and custom headers
- **๐Ÿช Cookie Management** - Automatic handling with persistent jar
- **๐Ÿ”’ SSL Pinning** - Enhanced security with certificate validation
- **๐Ÿ› Debug Tools** - Request logging and dumping capabilities

## ๐ŸŽฏ Perfect For

- **API Integration** - Simple REST API clients
- **Web Scraping** - Advanced bot detection evasion
- **Security Testing** - Custom TLS fingerprinting
- **Load Testing** - High-performance concurrent requests
- **Proxy Management** - Multi-proxy rotation and testing

## ๐Ÿ“‹ Quick Examples

### Simple GET Request
```go
session := azuretls.NewSession()
defer session.Close()

response, err := session.Get("https://api.github.com/user")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Status: %d\n", response.StatusCode)
```

### POST with JSON
```go
data := map[string]string{
"name": "AzureTLS",
"type": "HTTP Client",
}

response, err := session.Post("https://api.example.com/data", data)
```

### Browser Emulation
```go
session := azuretls.NewSession()
session.Browser = azuretls.Firefox // Automatic JA3 + HTTP/2 fingerprinting

response, err := session.Get("https://website.com")
```

### Custom Headers with Ordering
```go
session.OrderedHeaders = azuretls.OrderedHeaders{
{"User-Agent", "MyApp/1.0"},
{"Accept", "application/json"},
{"Authorization", "Bearer token"},
}
```

### Proxy Support
```go
session := azuretls.NewSession()
err := session.SetProxy("http://username:password@proxy.example.com:8080")
if err != nil {
log.Fatal(err)
}

response, err := session.Get("https://api.example.com")
```

## ๐ŸŒ Multi-Language Support via CFFI

AzureTLS Client can be used from **any programming language** that supports C Foreign Function Interface (FFI) through our comprehensive CFFI bindings.

### ๐Ÿ”— Available CFFI Implementation

The core CFFI (C Foreign Function Interface) library is available in the [`cffi/`](./cffi/) directory, providing a C API that can be used from any language supporting C FFI.

**๐Ÿ“ฆ Pre-built libraries available for:**
- **Linux** (amd64, arm64, 386, arm)
- **Windows** (amd64, 386, arm64)
- **macOS** (amd64, arm64)

### ๐ŸŒ Community Language Bindings

*Community-maintained repositories for additional languages:*

- ๐Ÿ”— **[Your Language]** - [Your Repository](https://github.com/yourusername/azuretls-yourlang) by [@yourusername](https://github.com/yourusername)

*Want to see your language binding featured here? See the [Contributing Language Bindings](#-contributing-language-bindings) section below!*

### ๐Ÿ“ฆ Getting Started with CFFI

1. **Download** pre-built libraries from our [releases](https://github.com/Noooste/azuretls-client/releases)
2. **Choose** your platform: Linux, Windows, macOS, FreeBSD
3. **Pick** your architecture: amd64, arm64, 386, arm
4. **Follow** language-specific examples in [`cffi/examples/`](./cffi/examples/)

### ๐Ÿ› ๏ธ Building CFFI Libraries

```bash
# Build for current platform
cd cffi && make

# Build for all platforms
cd cffi && make build-all

# Build for specific platform
cd cffi && make build-linux-amd64
```

### ๐Ÿ“š Comprehensive Documentation

Full CFFI documentation with API reference, examples, and troubleshooting guides is available at [`cffi/README.md`](./cffi/README.md).

### ๐Ÿค Contributing Language Bindings

**We welcome and appreciate contributions for additional language support!**

If you create bindings for a new programming language, we'd love to:
- ๐Ÿ“ **Feature your repository** in this README
- ๐Ÿ† **Credit you as a contributor**
- ๐Ÿ”— **Link to your implementation** for the community
- ๐Ÿš€ **Help promote** your language bindings

**Language bindings we'd especially appreciate:**
- ๐Ÿ **Python** - ctypes/cffi implementation
- ๐ŸŸจ **Node.js** - ffi-napi integration
- ๐Ÿ“˜ **TypeScript** - Type-safe Node.js bindings
- โ˜• **Java** - JNI bindings
- ๐Ÿ”ท **C#** - P/Invoke implementation
- ๐Ÿฆ€ **Rust** - libc/bindgen bindings
- And any others!

**How to contribute language bindings:**

1. ๐Ÿ—๏ธ **Create your own repository** with language bindings using our CFFI
2. ๐Ÿ”ง **Implement the core functionality** using our C API from [`cffi/`](./cffi/)
3. ๐Ÿ“– **Add comprehensive examples and documentation**
4. ๐Ÿงช **Include tests** demonstrating the functionality
5. ๐Ÿ“ฌ **Submit a pull request** to this repository to **add your repo link** to this README

**Repository Requirements:**
- Use the AzureTLS CFFI libraries from our releases
- Include clear installation instructions
- Provide working examples
- Add proper documentation
- Follow your language's best practices

## ๐Ÿค Community & Support

- **Issues**: [GitHub Issues](https://github.com/Noooste/azuretls-client/issues)
- **Discussions**: [GitHub Discussions](https://github.com/Noooste/azuretls-client/discussions)
- **Examples**: [examples/](./examples/)
- **CFFI Documentation**: [cffi/README.md](./cffi/README.md)

## ๐Ÿ™ Acknowledgments

AzureTLS Client is built with โค๏ธ by the open source community. Special thanks to all [contributors](https://github.com/Noooste/azuretls-client/graphs/contributors) who help make this project better.

## โญ Show Your Support

If AzureTLS Client helps you build something awesome, consider:
- โญ **Star this repository**
- ๐Ÿ› **Report bugs** or suggest features
- ๐Ÿ’ก **Share your use cases** in discussions
- ๐Ÿค **Contribute** code or documentation
- ๐ŸŒ **Create bindings** for your favorite programming language

[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/noste)

*Ready to build powerful HTTP clients with ease? Let's get started! ๐Ÿš€*