[object Object]

← back to Cli Printing Press

fix(cli): default Surf browser transport to h2 (#850)

9f2a4efef0c6d912d726d348ebc06af5c63c11f3 · 2026-05-09 13:59:25 -0700 · Trevin Chow

Files touched

Diff

commit 9f2a4efef0c6d912d726d348ebc06af5c63c11f3
Author: Trevin Chow <trevin@trevinchow.com>
Date:   Sat May 9 13:59:25 2026 -0700

    fix(cli): default Surf browser transport to h2 (#850)
---
 internal/cli/generate_test.go               |  6 ++++--
 internal/cli/root.go                        | 13 ++-----------
 internal/generator/generator_test.go        |  1 +
 internal/generator/templates/client.go.tmpl |  2 ++
 4 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/internal/cli/generate_test.go b/internal/cli/generate_test.go
index bdf91339..95e4c092 100644
--- a/internal/cli/generate_test.go
+++ b/internal/cli/generate_test.go
@@ -488,7 +488,8 @@ resources:
 	require.NoError(t, err)
 	assert.NotContains(t, string(clientGo), `req.Header.Set("User-Agent"`)
 	assert.Contains(t, string(clientGo), `"github.com/enetx/surf"`)
-	assert.Contains(t, string(clientGo), "ForceHTTP3()")
+	assert.Contains(t, string(clientGo), "ForceHTTP2()")
+	assert.NotContains(t, string(clientGo), "ForceHTTP3()")
 	assert.NotContains(t, string(clientGo), "runBrowserUseFetch")
 	assert.NotContains(t, string(clientGo), "runAgentBrowserFetch")
 	assert.NotContains(t, string(clientGo), "browser runtime required")
@@ -565,7 +566,8 @@ resources:
 	clientGo, err := os.ReadFile(filepath.Join(outputDir, "internal", "client", "client.go"))
 	require.NoError(t, err)
 	assert.Contains(t, string(clientGo), `"github.com/enetx/surf"`)
-	assert.Contains(t, string(clientGo), "ForceHTTP3()")
+	assert.Contains(t, string(clientGo), "ForceHTTP2()")
+	assert.NotContains(t, string(clientGo), "ForceHTTP3()")
 	assert.NotContains(t, string(clientGo), "runBrowserUseFetch")
 	assert.NotContains(t, string(clientGo), "runAgentBrowserFetch")
 
diff --git a/internal/cli/root.go b/internal/cli/root.go
index d7f205a0..755c09b7 100644
--- a/internal/cli/root.go
+++ b/internal/cli/root.go
@@ -540,7 +540,7 @@ func applyHTTPTransportDefault(apiSpec *spec.APISpec, analysis *browsersniff.Tra
 	if apiSpec == nil || apiSpec.HTTPTransport != "" {
 		return
 	}
-	if trafficAnalysisRecommendsBrowserHTTP3Transport(analysis) {
+	if trafficAnalysisExplicitlyRecommendsBrowserHTTP3Transport(analysis) {
 		apiSpec.HTTPTransport = spec.HTTPTransportBrowserChromeH3
 		return
 	}
@@ -603,19 +603,10 @@ func trafficAnalysisRecommendsBrowserTransport(analysis *browsersniff.TrafficAna
 	return false
 }
 
-func trafficAnalysisRecommendsBrowserHTTP3Transport(analysis *browsersniff.TrafficAnalysis) bool {
+func trafficAnalysisExplicitlyRecommendsBrowserHTTP3Transport(analysis *browsersniff.TrafficAnalysis) bool {
 	if analysis == nil {
 		return false
 	}
-	if analysis.Reachability != nil && analysis.Reachability.Mode == "browser_clearance_http" {
-		return true
-	}
-	for _, protection := range analysis.Protections {
-		switch strings.ToLower(protection.Label) {
-		case "cloudflare", "bot_challenge", "aws_waf", "datadome", "akamai", "perimeterx":
-			return true
-		}
-	}
 	for _, hint := range analysis.GenerationHints {
 		hint = strings.ToLower(hint)
 		if strings.Contains(hint, "http3") || strings.Contains(hint, "http_3") || strings.Contains(hint, "h3") {
diff --git a/internal/generator/generator_test.go b/internal/generator/generator_test.go
index 4f371b98..c381a384 100644
--- a/internal/generator/generator_test.go
+++ b/internal/generator/generator_test.go
@@ -1331,6 +1331,7 @@ func TestGenerateBrowserChromeTransport(t *testing.T) {
 	assert.Contains(t, string(clientGo), `"github.com/enetx/surf"`)
 	assert.Contains(t, string(clientGo), "Impersonate()")
 	assert.Contains(t, string(clientGo), "Chrome()")
+	assert.Contains(t, string(clientGo), "ForceHTTP2()")
 	assert.NotContains(t, string(clientGo), "ForceHTTP3()")
 
 	readme, err := os.ReadFile(filepath.Join(outputDir, "README.md"))
diff --git a/internal/generator/templates/client.go.tmpl b/internal/generator/templates/client.go.tmpl
index 4e4268eb..4099c4bf 100644
--- a/internal/generator/templates/client.go.tmpl
+++ b/internal/generator/templates/client.go.tmpl
@@ -274,6 +274,8 @@ func newHTTPClient(timeout time.Duration, jar http.CookieJar) *http.Client {
 		Timeout(timeout)
 {{- if .UsesBrowserHTTP3Transport}}
 	builder = builder.ForceHTTP3()
+{{- else}}
+	builder = builder.ForceHTTP2()
 {{- end}}
 	if jar == nil {
 		builder = builder.Session()

← f34645a8 docs(cli): add Cursor guide for printed CLIs (#833)  ·  back to Cli Printing Press  ·  fix(generator): scope caches by auth identity (#853) 1a8f68ee →