mirror of
https://gitee.com/mateos/mateclaw.git
synced 2026-09-15 11:58:34 +08:00
fix(anthropic): add anthropic-dangerous-direct-browser-access + accept headers
This commit is contained in:
parent
ae6467a5dc
commit
aabf2b8c32
@ -122,15 +122,26 @@ public class AgentClaudeCodeChatModelBuilder implements ChatModelBuilder {
|
|||||||
String xApp = apiHeaders.xApp();
|
String xApp = apiHeaders.xApp();
|
||||||
String betas = apiHeaders.allBetas();
|
String betas = apiHeaders.allBetas();
|
||||||
|
|
||||||
|
// Real Claude Code is an Electron + Node app that uses the official
|
||||||
|
// Anthropic JS SDK. The SDK auto-sets `accept: application/json` and
|
||||||
|
// `anthropic-dangerous-direct-browser-access: true` on every request.
|
||||||
|
// Spring AI's Java client doesn't, so Anthropic's edge fingerprint
|
||||||
|
// sees the missing headers and treats the traffic as suspicious —
|
||||||
|
// rate-limited harder than spec'd. Reference: openclaw
|
||||||
|
// anthropic-transport-stream.ts:567-574.
|
||||||
RestClient.Builder restClientBuilder = AgentAnthropicChatModelBuilder.applyHttpTimeouts(
|
RestClient.Builder restClientBuilder = AgentAnthropicChatModelBuilder.applyHttpTimeouts(
|
||||||
restClientBuilderProvider.getIfAvailable(RestClient::builder))
|
restClientBuilderProvider.getIfAvailable(RestClient::builder))
|
||||||
.defaultHeader(HttpHeaders.AUTHORIZATION, authHeader)
|
.defaultHeader(HttpHeaders.AUTHORIZATION, authHeader)
|
||||||
.defaultHeader(HttpHeaders.USER_AGENT, userAgent)
|
.defaultHeader(HttpHeaders.USER_AGENT, userAgent)
|
||||||
|
.defaultHeader(HttpHeaders.ACCEPT, "application/json")
|
||||||
|
.defaultHeader("anthropic-dangerous-direct-browser-access", "true")
|
||||||
.defaultHeader("x-app", xApp);
|
.defaultHeader("x-app", xApp);
|
||||||
|
|
||||||
WebClient.Builder webClientBuilder = webClientBuilderProvider.getIfAvailable(WebClient::builder)
|
WebClient.Builder webClientBuilder = webClientBuilderProvider.getIfAvailable(WebClient::builder)
|
||||||
.defaultHeader(HttpHeaders.AUTHORIZATION, authHeader)
|
.defaultHeader(HttpHeaders.AUTHORIZATION, authHeader)
|
||||||
.defaultHeader(HttpHeaders.USER_AGENT, userAgent)
|
.defaultHeader(HttpHeaders.USER_AGENT, userAgent)
|
||||||
|
.defaultHeader(HttpHeaders.ACCEPT, "application/json")
|
||||||
|
.defaultHeader("anthropic-dangerous-direct-browser-access", "true")
|
||||||
.defaultHeader("x-app", xApp);
|
.defaultHeader("x-app", xApp);
|
||||||
|
|
||||||
// NoopApiKey.getValue() returns "" → Spring AI's addDefaultHeadersIfMissing
|
// NoopApiKey.getValue() returns "" → Spring AI's addDefaultHeadersIfMissing
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user