π δΈζζζ‘£ | English Documentation
A comprehensive Go SDK for interacting with the Browser Open API service, providing seamless integration for browser environment management and user authentication.
- π Secure Authentication: Built-in API key authentication with Bearer token support
- π Flexible Configuration: Customizable endpoints, timeouts, and HTTP clients
- π Debug Mode: Built-in structured logging for request/response debugging
- β‘ Type-Safe Operations: Strongly typed request/response structures
- π§ Modular Design: Clean separation of concerns across multiple components
- π§ͺ Comprehensive Testing: Full test coverage with mocking capabilities
- π¦ Easy Integration: Simple installation and straightforward API usage
go get github.com/browsersdk/brosdk-server-gopackage main
import (
"context"
"fmt"
"log"
"time"
"github.com/browsersdk/brosdk-server-go"
)
func main() {
// Create client with required API key
client, err := brosdk.NewClient("your-api-key-here")
if err != nil {
log.Fatal("Failed to create client:", err)
}
// Get user signature for authentication
sigReq := &brosdk.GetUserSigRequest{
CustomerId: "customer123",
Duration: 3600, // 1 hour in seconds
}
sigResp, err := client.GetUserSig(context.Background(), sigReq)
if err != nil {
log.Fatal("Failed to get user signature:", err)
}
fmt.Printf("User Signature: %s\n", sigResp.Data.UserSig)
fmt.Printf("Expires at: %d\n", sigResp.Data.ExpireTime)
}// Configure with custom settings
client, err := brosdk.NewClient("your-api-key-here",
brosdk.WithEndpoint("https://custom.api.browser-open.com"),
brosdk.WithTimeout(60*time.Second),
brosdk.WithHTTPClient(&http.Client{
Timeout: 30 * time.Second,
}),
)
if err != nil {
log.Fatal("Failed to create client:", err)
}Enable debug mode to log all HTTP requests and responses:
// Enable debug mode (logs to stderr by default)
client, err := brosdk.NewClient("your-api-key-here",
brosdk.WithDebug(true),
)
// Enable debug mode with custom logger
import "log"
logger := log.New(os.Stdout, "[brosdk] ", log.LstdFlags)
client, err := brosdk.NewClient("your-api-key-here",
brosdk.WithDebug(true),
brosdk.WithLogger(logger),
)
// Example debug output:
// [brosdk] 2026/03/20 12:00:00 β POST /api/v2/browser/create body={"envId":"...","finger":{...}}
// [brosdk] 2026/03/20 12:00:00 β POST /api/v2/browser/create elapsed=123ms http_status=200 body={"code":200,"data":{...}}Debug mode helps you troubleshoot API issues by logging:
- Request method and URL path
- Request body (JSON)
- Response HTTP status code
- Response body (JSON)
- Request duration/elapsed time
- Error details (if any)
The SDK includes comprehensive test coverage. Run tests with:
# Run all tests
go test -v
# Run tests with coverage
go test -v -cover
# Run tests with race detection
go test -v -race
# Run specific test
go test -v -run TestClient_GetUserSigbrosdk-server-go/
βββ sdk.go # Core SDK implementation
βββ types.go # Data structures and type definitions
βββ sdk_test.go # Comprehensive unit tests
βββ README.md # Documentation
βββ go.mod # Go module definition
βββ go.sum # Dependency checksums
Retrieve user signature for secure authentication:
req := &brosdk.GetUserSigRequest{
CustomerId: "customer123",
Duration: 3600, // seconds
}
resp, err := client.GetUserSig(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Signature: %s\n", resp.Data.UserSig)
fmt.Printf("Expires: %d\n", resp.Data.ExpireTime)Create a new browser environment configuration:
req := &brosdk.EnvInfo{
CustomerId: "customer123",
EnvName: "My Browser Environment",
Serial: "001",
Finger: brosdk.Finger{
System: "Windows",
Kernel: "Chrome",
KernelVersion: "120.0.0.0",
UaVersion: "120",
Language: []string{"zh-CN"},
Zone: "Asia/Shanghai",
},
}
resp, err := client.EnvCreate(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created Environment ID: %s\n", resp.EnvId)Update an existing browser environment:
req := &brosdk.EnvInfo{
EnvId: "123",
CustomerId: "customer123",
EnvName: "Updated Environment Name",
Finger: brosdk.Finger{
System: "Windows",
Kernel: "Chrome",
KernelVersion: "120.0.0.0",
},
// Update other fields as needed...
}
resp, err := client.EnvUpdate(context.Background(), req)
if err != nil {
log.Fatal(err)
}Delete a browser environment:
req := &brosdk.EnvDelReq{
EnvId: "123",
}
err := client.EnvDestroy(context.Background(), req)
if err != nil {
log.Fatal(err)
}Get paginated list of browser environments:
req := &brosdk.GetEnvPageReq{
ReqPage: brosdk.ReqPage{
Page: 1,
PageSize: 20,
},
CustomerId: "customer123",
EnvIds: []string{"1", "2", "3"}, // Optional filtering
}
resp, err := client.GetEnvPage(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Total environments: %d\n", resp.Total)
for _, env := range resp.List {
fmt.Printf("ID: %s, Name: %s\n", env.EnvId, env.EnvName)
}client, err := brosdk.NewClient("api-key",
brosdk.WithEndpoint("https://your-custom-endpoint.com"))client, err := brosdk.NewClient("api-key",
brosdk.WithTimeout(30 * time.Second))customClient := &http.Client{
Timeout: 10 * time.Second,
// Add custom transport, cookies, etc.
}
client, err := brosdk.NewClient("api-key",
brosdk.WithHTTPClient(customClient))// Enable debug logging
client, err := brosdk.NewClient("api-key",
brosdk.WithDebug(true),
)
// Custom logger for debug output
logger := log.New(os.Stdout, "[brosdk] ", log.LstdFlags)
client, err := brosdk.NewClient("api-key",
brosdk.WithDebug(true),
brosdk.WithLogger(logger),
)The SDK provides comprehensive error handling:
client, err := brosdk.NewClient("") // Empty API key
if err != nil {
// Handle validation error
fmt.Printf("Validation error: %v\n", err)
return
}
// API call errors
resp, err := client.GetUserSig(ctx, req)
if err != nil {
// Handle API errors
if strings.Contains(err.Error(), "status:") {
fmt.Printf("API returned error status\n")
} else if strings.Contains(err.Error(), "request failed") {
fmt.Printf("Network error occurred\n")
}
return
}POST /api/usersig- User signature generationPOST /api/env- Environment creation
POST /api/v2/browser/update- Environment updatesPOST /api/v2/browser/destroy- Environment deletionPOST /api/v2/browser/page- Environment listing
- Bearer Token Authentication: Automatic Authorization header management
- HTTPS Support: Secure communication by default
- Input Validation: Client-side validation of required parameters
- Context Support: Request cancellation and timeout handling
All API responses follow a consistent structure:
type Response struct {
Code int `json:"code"` // 0 for success, non-zero for errors
Data interface{} `json:"data"` // Response data varies by endpoint
Msg string `json:"msg"` // Human-readable message
ReqId string `json:"reqId"` // Request identifier for debugging
}- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
# Clone the repository
git clone https://github.com/browsersdk/brosdk-server-go.git
cd brosdk-server-go
# Run tests
go test -v
# Check code coverage
go test -coverprofile=coverage.out
go tool cover -html=coverage.out
# Run linting
golangci-lint runThis project is licensed under the MIT License - see the LICENSE file for details.
For issues, questions, or contributions:
- π Report Issues
- π¬ GitHub Discussions
- π§ Email: support@browsersdk.com
- β¨ Add debug mode with structured logging
- β¨ Add
WithDebug()option to enable/disable debug logging - β¨ Add
WithLogger()option for custom log output - π Fix incorrect error messages in
GetUiFingerList - π Fix missing JSON tag on
CONAB.Mustfield - π Remove leftover debug
fmt.Printfstatements - π§ͺ Add comprehensive debug mode tests
- Initial release
- Core SDK functionality
- Comprehensive test coverage
- Full API method implementations
- Documentation and examples