← 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
M internal/cli/generate_test.goM internal/cli/root.goM internal/generator/generator_test.goM internal/generator/templates/client.go.tmpl
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 →