add proxy-header support - #912
Merged
Merged
Conversation
Motivation: when connecting via HTTP proxy, allow users to set HTTP headers on the CONNECT request to the proxy. This is useful for attribution purposes. Modifications: - adds a `connectHeaders` parameter to HTTPClient.Configuration - parses `connectHeaders` swift-configuration property as list of colon-separated `key: value` pairs - sets proxy headers on CONNECT request Result: implements proxy-header support
benrobby
force-pushed
the
proxy-connect-headers
branch
from
July 23, 2026 07:22
b41c2bc to
777e3ee
Compare
glbrntt
reviewed
Jul 23, 2026
glbrntt
left a comment
Collaborator
There was a problem hiding this comment.
LGTM module a couple of nits
added 2 commits
July 23, 2026 13:04
glbrntt
reviewed
Jul 23, 2026
glbrntt
enabled auto-merge (squash)
July 23, 2026 11:50
4 tasks
o-nnerb
added a commit
to request-dl/request-dl-nio
that referenced
this pull request
Aug 17, 2026
## Summary - Adds `connectHeaders` to `Proxy`, exposing async-http-client's `connectHeaders` (swift-server/async-http-client#912, available since the pinned `1.36.0`) — extra headers sent only on the HTTP `CONNECT` request used to establish the proxy tunnel. - `connectHeaders` is composed as a `Property` builder, the same way `Form` scopes its own per-part headers: `Proxy` becomes generic over `Headers: Property`, and a new init resolves that subtree via `_makeProperty` + `search(for: HeaderNode.self)` into a local `HTTPHeaders` value, entirely separate from the request's own headers. - `Internals.Proxy` gains a `connectHeaders` field, threaded only through the `.http` branch of `build()`. Excluded from `Hashable` — `NIOHTTP1.HTTPHeaders` isn't `Hashable` — mirroring how `async-http-client`'s own `Proxy` type handles the same constraint. - The two existing initializers (`authorization:` and `connection:`) are unchanged, constrained to `Headers == EmptyProperty`. ```swift DataTask { BaseURL("example.com") Proxy(host: "proxy.example.com", port: 8080) { CustomHeader(name: "X-Proxy-Token", value: "abc123") } } ``` Marked `breaking-changes` because `Proxy` is now generic (`Proxy<Headers: Property>`) — source-compatible for every existing call site, but any code that spells the type explicitly (e.g. `let p: Proxy`) needs `Proxy<EmptyProperty>`. Implements #279. ## Test plan - [x] `swift test --filter RequestDLTests.ProxyTests` - [x] `swift test --filter RequestDLInternalsTests.InternalsProxyTests` - [x] `swift test` (full suite, 1103 tests) - [x] `swift format lint --recursive --strict Sources Tests` --------- Co-authored-by: brennobemoura <37243584+brennobemoura@users.noreply.github.com>
o-nnerb
added a commit
to request-dl/request-dl-nio
that referenced
this pull request
Aug 17, 2026
Exposes async-http-client's connectHeaders (swift-server/async-http-client#912, available since the pinned 1.36.0) through Proxy, composed as a Property builder the same way Form scopes its own per-part headers — resolves the Headers subtree via _makeProperty + search(for: HeaderNode.self) into a local HTTPHeaders value instead of writing into the main request headers. Internals.Proxy gains a connectHeaders field, threaded only through the .http branch of build(); excluded from Hashable since NIOHTTP1.HTTPHeaders isn't, mirroring how async-http-client's own Proxy handles the same constraint. Implements #279.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation:
when connecting via a HTTP proxy, this now allows users to set HTTP headers on the CONNECT request to the proxy. This is useful for caller attribution purposes.
Modifications:
connectHeadersparameter to HTTPClient.ConfigurationconnectHeadersswift-configuration property as list of colon-separatedkey: valuepairsResult:
implements proxy-header support