Skip to content

Commit 84ca201

Browse files
authored
Add proxies parameter to top-level API functions (#1198)
* Add `proxies` parameter to top-level API functions * Fix typo
1 parent 25507ac commit 84ca201

4 files changed

Lines changed: 24 additions & 4 deletions

File tree

docs/advanced.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ client = httpx.Client(trust_env=False)
262262

263263
## HTTP Proxying
264264

265-
HTTPX supports setting up [HTTP proxies](https://en.wikipedia.org/wiki/Proxy_server#Web_proxy_servers) via the `proxies` parameter to be passed on client initialization.
265+
HTTPX supports setting up [HTTP proxies](https://en.wikipedia.org/wiki/Proxy_server#Web_proxy_servers) via the `proxies` parameter to be passed on client initialization or top-level API functions like `httpx.get(..., proxies=...)`.
266266

267267
_Note: SOCKS proxies are not supported yet._
268268

docs/compatibility.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ This is different to the `requests` usage of `proxies={"http": ..., "https": ...
4242

4343
This change is for better consistency with more complex mappings, that might also include domain names, such as `proxies={"all://": ..., "all://www.example.com": None}` which maps all requests onto a proxy, except for requests to "www.example.com" which have an explicit exclusion.
4444

45+
Also note that `requests.Session.request(...)` allows a `proxies=...` parameter, whereas `httpx.Client.request(...)` does not.
46+
4547
## SSL configuration
4648

4749
When using a `Client` instance, the `trust_env`, `verify`, and `cert` arguments should always be passed on client instantiation, rather than passed to the request method.

httpx/_api.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
CertTypes,
99
CookieTypes,
1010
HeaderTypes,
11+
ProxiesTypes,
1112
QueryParamTypes,
1213
RequestData,
1314
RequestFiles,
@@ -28,6 +29,7 @@ def request(
2829
headers: HeaderTypes = None,
2930
cookies: CookieTypes = None,
3031
auth: AuthTypes = None,
32+
proxies: ProxiesTypes = None,
3133
timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
3234
allow_redirects: bool = True,
3335
verify: VerifyTypes = True,
@@ -56,6 +58,7 @@ def request(
5658
request.
5759
* **auth** - *(optional)* An authentication class to use when sending the
5860
request.
61+
* **proxies** - *(optional)* A dictionary mapping proxy keys to proxy URLs.
5962
* **timeout** - *(optional)* The timeout configuration to use when sending
6063
the request.
6164
* **allow_redirects** - *(optional)* Enables or disables HTTP redirects.
@@ -81,7 +84,7 @@ def request(
8184
```
8285
"""
8386
with Client(
84-
cert=cert, verify=verify, timeout=timeout, trust_env=trust_env,
87+
proxies=proxies, cert=cert, verify=verify, timeout=timeout, trust_env=trust_env,
8588
) as client:
8689
return client.request(
8790
method=method,
@@ -108,13 +111,14 @@ def stream(
108111
headers: HeaderTypes = None,
109112
cookies: CookieTypes = None,
110113
auth: AuthTypes = None,
114+
proxies: ProxiesTypes = None,
111115
timeout: TimeoutTypes = DEFAULT_TIMEOUT_CONFIG,
112116
allow_redirects: bool = True,
113117
verify: VerifyTypes = True,
114118
cert: CertTypes = None,
115119
trust_env: bool = True,
116120
) -> StreamContextManager:
117-
client = Client(cert=cert, verify=verify, trust_env=trust_env)
121+
client = Client(proxies=proxies, cert=cert, verify=verify, trust_env=trust_env)
118122
request = Request(
119123
method=method,
120124
url=url,
@@ -142,6 +146,7 @@ def get(
142146
headers: HeaderTypes = None,
143147
cookies: CookieTypes = None,
144148
auth: AuthTypes = None,
149+
proxies: ProxiesTypes = None,
145150
allow_redirects: bool = True,
146151
cert: CertTypes = None,
147152
verify: VerifyTypes = True,
@@ -163,6 +168,7 @@ def get(
163168
headers=headers,
164169
cookies=cookies,
165170
auth=auth,
171+
proxies=proxies,
166172
allow_redirects=allow_redirects,
167173
cert=cert,
168174
verify=verify,
@@ -178,6 +184,7 @@ def options(
178184
headers: HeaderTypes = None,
179185
cookies: CookieTypes = None,
180186
auth: AuthTypes = None,
187+
proxies: ProxiesTypes = None,
181188
allow_redirects: bool = True,
182189
cert: CertTypes = None,
183190
verify: VerifyTypes = True,
@@ -199,6 +206,7 @@ def options(
199206
headers=headers,
200207
cookies=cookies,
201208
auth=auth,
209+
proxies=proxies,
202210
allow_redirects=allow_redirects,
203211
cert=cert,
204212
verify=verify,
@@ -214,6 +222,7 @@ def head(
214222
headers: HeaderTypes = None,
215223
cookies: CookieTypes = None,
216224
auth: AuthTypes = None,
225+
proxies: ProxiesTypes = None,
217226
allow_redirects: bool = True,
218227
cert: CertTypes = None,
219228
verify: VerifyTypes = True,
@@ -237,6 +246,7 @@ def head(
237246
headers=headers,
238247
cookies=cookies,
239248
auth=auth,
249+
proxies=proxies,
240250
allow_redirects=allow_redirects,
241251
cert=cert,
242252
verify=verify,
@@ -255,6 +265,7 @@ def post(
255265
headers: HeaderTypes = None,
256266
cookies: CookieTypes = None,
257267
auth: AuthTypes = None,
268+
proxies: ProxiesTypes = None,
258269
allow_redirects: bool = True,
259270
cert: CertTypes = None,
260271
verify: VerifyTypes = True,
@@ -276,6 +287,7 @@ def post(
276287
headers=headers,
277288
cookies=cookies,
278289
auth=auth,
290+
proxies=proxies,
279291
allow_redirects=allow_redirects,
280292
cert=cert,
281293
verify=verify,
@@ -294,6 +306,7 @@ def put(
294306
headers: HeaderTypes = None,
295307
cookies: CookieTypes = None,
296308
auth: AuthTypes = None,
309+
proxies: ProxiesTypes = None,
297310
allow_redirects: bool = True,
298311
cert: CertTypes = None,
299312
verify: VerifyTypes = True,
@@ -315,6 +328,7 @@ def put(
315328
headers=headers,
316329
cookies=cookies,
317330
auth=auth,
331+
proxies=proxies,
318332
allow_redirects=allow_redirects,
319333
cert=cert,
320334
verify=verify,
@@ -333,6 +347,7 @@ def patch(
333347
headers: HeaderTypes = None,
334348
cookies: CookieTypes = None,
335349
auth: AuthTypes = None,
350+
proxies: ProxiesTypes = None,
336351
allow_redirects: bool = True,
337352
cert: CertTypes = None,
338353
verify: VerifyTypes = True,
@@ -354,6 +369,7 @@ def patch(
354369
headers=headers,
355370
cookies=cookies,
356371
auth=auth,
372+
proxies=proxies,
357373
allow_redirects=allow_redirects,
358374
cert=cert,
359375
verify=verify,
@@ -369,6 +385,7 @@ def delete(
369385
headers: HeaderTypes = None,
370386
cookies: CookieTypes = None,
371387
auth: AuthTypes = None,
388+
proxies: ProxiesTypes = None,
372389
allow_redirects: bool = True,
373390
cert: CertTypes = None,
374391
verify: VerifyTypes = True,
@@ -390,6 +407,7 @@ def delete(
390407
headers=headers,
391408
cookies=cookies,
392409
auth=auth,
410+
proxies=proxies,
393411
allow_redirects=allow_redirects,
394412
cert=cert,
395413
verify=verify,

httpx/_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ class Client(BaseClient):
467467
to authenticate the client. Either a path to an SSL certificate file, or
468468
two-tuple of (certificate file, key file), or a three-tuple of (certificate
469469
file, key file, password).
470-
* **proxies** - *(optional)* A dictionary mapping HTTP protocols to proxy
470+
* **proxies** - *(optional)* A dictionary mapping proxy keys to proxy
471471
URLs.
472472
* **timeout** - *(optional)* The timeout configuration to use when sending
473473
requests.

0 commit comments

Comments
 (0)