Deployed 652f051 with MkDocs version: 1.6.1

This commit is contained in:
Tom Christie 2025-09-11 12:02:38 +01:00
parent cfa72f3201
commit 161324d9d5
19 changed files with 494 additions and 323 deletions

View File

@ -1149,22 +1149,22 @@ or fallback to the default.</p>
<li>An instance of subclasses of <code>httpx.Auth</code>.</li>
</ul>
<p>The most involved of these is the last, which allows you to create authentication flows involving one or more requests. A subclass of <code>httpx.Auth</code> should implement <code>def auth_flow(request)</code>, and yield any requests that need to be made...</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span> <span class="o">=</span> <span class="n">token</span>
<span class="k">def</span> <span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="c1"># Send the request, with a custom `X-Authentication` header.</span>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;X-Authentication&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">token</span>
<span class="k">yield</span> <span class="n">request</span>
</code></pre></div>
<p>If the auth flow requires more than one request, you can issue multiple yields, and obtain the response in each case...</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span> <span class="o">=</span> <span class="n">token</span>
<span class="k">def</span> <span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">yield</span> <span class="n">request</span>
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">401</span><span class="p">:</span>
<span class="c1"># If the server issues a 401 response then resend the request,</span>
@ -1175,13 +1175,13 @@ or fallback to the default.</p>
<p>Custom authentication classes are designed to not perform any I/O, so that they may be used with both sync and async client instances. If you are implementing an authentication scheme that requires the request body, then you need to indicate this on the class using a <code>requires_request_body</code> property.</p>
<p>You will then be able to access <code>request.content</code> inside the <code>.auth_flow()</code> method.</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="n">requires_request_body</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">token</span> <span class="o">=</span> <span class="n">token</span>
<span class="k">def</span> <span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">yield</span> <span class="n">request</span>
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">401</span><span class="p">:</span>
<span class="c1"># If the server issues a 401 response then resend the request,</span>
@ -1189,22 +1189,22 @@ or fallback to the default.</p>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;X-Authentication&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sign_request</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">request</span>
<span class="k">def</span> <span class="nf">sign_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sign_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="c1"># Create a request signature, based on `request.method`, `request.url`,</span>
<span class="c1"># `request.headers`, and `request.content`.</span>
<span class="o">...</span>
</code></pre></div>
<p>Similarly, if you are implementing a scheme that requires access to the response body, then use the <code>requires_response_body</code> property. You will then be able to access response body properties and methods such as <code>response.content</code>, <code>response.text</code>, <code>response.json()</code>, etc.</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="n">requires_response_body</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">access_token</span><span class="p">,</span> <span class="n">refresh_token</span><span class="p">,</span> <span class="n">refresh_url</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">access_token</span><span class="p">,</span> <span class="n">refresh_token</span><span class="p">,</span> <span class="n">refresh_url</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">access_token</span> <span class="o">=</span> <span class="n">access_token</span>
<span class="bp">self</span><span class="o">.</span><span class="n">refresh_token</span> <span class="o">=</span> <span class="n">refresh_token</span>
<span class="bp">self</span><span class="o">.</span><span class="n">refresh_url</span> <span class="o">=</span> <span class="n">refresh_url</span>
<span class="k">def</span> <span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s2">&quot;X-Authentication&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">access_token</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">yield</span> <span class="n">request</span>
@ -1217,11 +1217,11 @@ or fallback to the default.</p>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s2">&quot;X-Authentication&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">access_token</span>
<span class="k">yield</span> <span class="n">request</span>
<span class="k">def</span> <span class="nf">build_refresh_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">build_refresh_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Return an `httpx.Request` for refreshing tokens.</span>
<span class="o">...</span>
<span class="k">def</span> <span class="nf">update_tokens</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">update_tokens</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">):</span>
<span class="c1"># Update the `.access_token` and `.refresh_token` tokens</span>
<span class="c1"># based on a refresh response.</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
@ -1229,47 +1229,47 @@ or fallback to the default.</p>
</code></pre></div>
<p>If you <em>do</em> need to perform I/O other than HTTP requests, such as accessing a disk-based cache, or you need to use concurrency primitives, such as locks, then you should override <code>.sync_auth_flow()</code> and <code>.async_auth_flow()</code> (instead of <code>.auth_flow()</code>). The former will be used by <code>httpx.Client</code>, while the latter will be used by <code>httpx.AsyncClient</code>.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">asyncio</span>
<span class="kn">import</span> <span class="nn">threading</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">threading</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="k">class</span> <span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">class</span><span class="w"> </span><span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_sync_lock</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">RLock</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_async_lock</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">sync_get_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sync_get_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_sync_lock</span><span class="p">:</span>
<span class="o">...</span>
<span class="k">def</span> <span class="nf">sync_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sync_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sync_get_token</span><span class="p">()</span>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s2">&quot;Authorization&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Token </span><span class="si">{</span><span class="n">token</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">yield</span> <span class="n">request</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">async_get_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">async_get_token</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">_async_lock</span><span class="p">:</span>
<span class="o">...</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">async_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">async_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">token</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">async_get_token</span><span class="p">()</span>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s2">&quot;Authorization&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Token </span><span class="si">{</span><span class="n">token</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">yield</span> <span class="n">request</span>
</code></pre></div>
<p>If you only want to support one of the two methods, then you should still override it, but raise an explicit <code>RuntimeError</code>.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">sync_only_library</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sync_only_library</span>
<span class="k">class</span> <span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">sync_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">class</span><span class="w"> </span><span class="nc">MyCustomAuth</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">Auth</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">sync_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">token</span> <span class="o">=</span> <span class="n">sync_only_library</span><span class="o">.</span><span class="n">get_token</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s2">&quot;Authorization&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Token </span><span class="si">{</span><span class="n">token</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">yield</span> <span class="n">request</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">async_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">async_auth_flow</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Cannot use a sync authentication class with httpx.AsyncClient&quot;</span><span class="p">)</span>
</code></pre></div>

View File

@ -1284,7 +1284,7 @@
<span class="gp">... </span> <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;https://example.com&#39;</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;alice&#39;</span><span class="p">,</span> <span class="s1">&#39;ecila123&#39;</span><span class="p">))</span>
<span class="gp">...</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">auth</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;Authorization&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">base64</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">base64</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">auth</span><span class="p">)</span>
<span class="go">b&#39;alice:ecila123&#39;</span>
</code></pre></div>
@ -1332,10 +1332,10 @@
<p>If you need to monitor download progress of large responses, you can use response streaming and inspect the <code>response.num_bytes_downloaded</code> property.</p>
<p>This interface is required for properly determining download progress, because the total number of bytes returned by <code>response.content</code> or <code>response.iter_content()</code> will not always correspond with the raw content length of the response if HTTP response compression is being used.</p>
<p>For example, showing a progress bar using the <a href="https://github.com/tqdm/tqdm"><code>tqdm</code></a> library while a response is being downloaded could be done like this…</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">tempfile</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">tempfile</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">tqdm</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">tqdm</span><span class="w"> </span><span class="kn">import</span> <span class="n">tqdm</span>
<span class="k">with</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">NamedTemporaryFile</span><span class="p">()</span> <span class="k">as</span> <span class="n">download_file</span><span class="p">:</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;https://speed.hetzner.de/100MB.bin&quot;</span>
@ -1352,9 +1352,9 @@
<p><img alt="tqdm progress bar" src="../../img/tqdm-progress.gif" /></p>
<p>Or an alternate example, this time using the <a href="https://github.com/willmcgugan/rich"><code>rich</code></a> library…</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">tempfile</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">rich.progress</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">tempfile</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">rich.progress</span>
<span class="k">with</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">NamedTemporaryFile</span><span class="p">()</span> <span class="k">as</span> <span class="n">download_file</span><span class="p">:</span>
<span class="n">url</span> <span class="o">=</span> <span class="s2">&quot;https://speed.hetzner.de/100MB.bin&quot;</span>
@ -1377,14 +1377,14 @@
<h2 id="monitoring-upload-progress">Monitoring upload progress</h2>
<p>If you need to monitor upload progress of large responses, you can use request content generator streaming.</p>
<p>For example, showing a progress bar using the <a href="https://github.com/tqdm/tqdm"><code>tqdm</code></a> library.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">io</span>
<span class="kn">import</span> <span class="nn">random</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">io</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">random</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">from</span> <span class="nn">tqdm</span> <span class="kn">import</span> <span class="n">tqdm</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">tqdm</span><span class="w"> </span><span class="kn">import</span> <span class="n">tqdm</span>
<span class="k">def</span> <span class="nf">gen</span><span class="p">():</span>
<span class="k">def</span><span class="w"> </span><span class="nf">gen</span><span class="p">():</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> this is a complete example with generated random bytes.</span>
<span class="sd"> you can replace `io.BytesIO` with real file object.</span>
@ -1405,8 +1405,9 @@
<p>As mentioned in the <a href="../../quickstart/#sending-multipart-file-uploads">quickstart</a>
multipart file encoding is available by passing a dictionary with the
name of the payloads as keys and either tuple of elements or a file-like object or a string as values.</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;upload-file&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">),</span> <span class="s1">&#39;application/vnd.ms-excel&#39;</span><span class="p">)}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">report_file</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;upload-file&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="n">report_file</span><span class="p">,</span> <span class="s1">&#39;application/vnd.ms-excel&#39;</span><span class="p">)}</span>
<span class="gp">... </span> <span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<span class="go">{</span>
<span class="go"> ...</span>
@ -1450,9 +1451,12 @@ MIME header field.</li>
<p>You can also send multiple files in one go with a multiple file field form.
To do that, pass a list of <code>(field, &lt;file&gt;)</code> items instead of a dictionary, allowing you to pass multiple items with the same <code>field</code>.
For instance this request sends 2 files, <code>foo.png</code> and <code>bar.png</code> in one request on the <code>images</code> form field:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">files</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">&#39;images&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;foo.png&#39;</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;foo.png&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">),</span> <span class="s1">&#39;image/png&#39;</span><span class="p">)),</span>
<span class="go"> (&#39;images&#39;, (&#39;bar.png&#39;, open(&#39;bar.png&#39;, &#39;rb&#39;), &#39;image/png&#39;))]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;foo.png&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">foo_file</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;bar.png&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">bar_file</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">files</span> <span class="o">=</span> <span class="p">[</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">&#39;images&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;foo.png&#39;</span><span class="p">,</span> <span class="n">foo_file</span><span class="p">,</span> <span class="s1">&#39;image/png&#39;</span><span class="p">)),</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">&#39;images&#39;</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;bar.png&#39;</span><span class="p">,</span> <span class="n">bar_file</span><span class="p">,</span> <span class="s1">&#39;image/png&#39;</span><span class="p">)),</span>
<span class="gp">... </span> <span class="p">]</span>
<span class="gp">... </span> <span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
</code></pre></div>

View File

@ -972,10 +972,10 @@ every time a particular type of event takes place.</p>
<li><code>response</code> - Called after the response has been fetched from the network, but before it is returned to the caller. Passed the <code>response</code> instance.</li>
</ul>
<p>These allow you to install client-wide functionality such as logging, monitoring or tracing.</p>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">log_request</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">log_request</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Request event hook: </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">method</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2"> - Waiting for response&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">log_response</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">log_response</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="n">request</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">request</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Response event hook: </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">method</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2"> - Status </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
@ -985,7 +985,7 @@ every time a particular type of event takes place.</p>
<p>You can also use these hooks to install response processing code, such as this
example, which creates a client instance that always raises <code>httpx.HTTPStatusError</code>
on 4xx and 5xx responses.</p>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">raise_on_4xx_5xx</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">raise_on_4xx_5xx</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">event_hooks</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;response&#39;</span><span class="p">:</span> <span class="p">[</span><span class="n">raise_on_4xx_5xx</span><span class="p">]})</span>
@ -999,7 +999,7 @@ should be read or not.</p>
need to call <code>response.read()</code>, or for AsyncClients, <code>response.aread()</code>.</p>
</div>
<p>The hooks are also allowed to modify <code>request</code> and <code>response</code> objects.</p>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">add_timestamp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">add_timestamp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">request</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">&#39;x-request-timestamp&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span><span class="o">.</span><span class="n">isoformat</span><span class="p">()</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">event_hooks</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;request&#39;</span><span class="p">:</span> <span class="p">[</span><span class="n">add_timestamp</span><span class="p">]})</span>

View File

@ -1242,9 +1242,9 @@
<p>The trace extension allows a callback handler to be installed to monitor the internal
flow of events within the underlying <code>httpcore</code> transport.</p>
<p>The simplest way to explain this is with an example:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="n">event_name</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="n">event_name</span><span class="p">,</span> <span class="n">info</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">event_name</span><span class="p">,</span> <span class="n">info</span><span class="p">)</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">()</span>

View File

@ -1111,9 +1111,9 @@
<p>If you're using a <code>Client()</code> instance you should pass any <code>verify=&lt;...&gt;</code> configuration when instantiating the client.</p>
<p>By default the <a href="https://certifiio.readthedocs.io/en/latest/">certifi CA bundle</a> is used for SSL verification.</p>
<p>For more complex configurations you can pass an <a href="https://docs.python.org/3/library/ssl.html">SSL Context</a> instance...</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">certifi</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">ssl</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">certifi</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">ssl</span>
<span class="c1"># This SSL context is equivelent to the default `verify=True`.</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">create_default_context</span><span class="p">(</span><span class="n">cafile</span><span class="o">=</span><span class="n">certifi</span><span class="o">.</span><span class="n">where</span><span class="p">())</span>
@ -1121,9 +1121,9 @@
</code></pre></div>
<p>Using <a href="https://truststore.readthedocs.io/">the <code>truststore</code> package</a> to support system certificate stores...</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">ssl</span>
<span class="kn">import</span> <span class="nn">truststore</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">ssl</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">truststore</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="c1"># Use system certificate stores.</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">truststore</span><span class="o">.</span><span class="n">SSLContext</span><span class="p">(</span><span class="n">ssl</span><span class="o">.</span><span class="n">PROTOCOL_TLS_CLIENT</span><span class="p">)</span>
@ -1131,8 +1131,8 @@
</code></pre></div>
<p>Loding an alternative certificate verification store using <a href="https://docs.python.org/3/library/ssl.html">the standard SSL context API</a>...</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">ssl</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">ssl</span>
<span class="c1"># Use an explicitly configured certificate store.</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">create_default_context</span><span class="p">(</span><span class="n">cafile</span><span class="o">=</span><span class="s2">&quot;path/to/certs.pem&quot;</span><span class="p">)</span> <span class="c1"># Either cafile or capath.</span>
@ -1148,17 +1148,7 @@
</code></pre></div>
<h3 id="working-with-ssl_cert_file-and-ssl_cert_dir">Working with <code>SSL_CERT_FILE</code> and <code>SSL_CERT_DIR</code></h3>
<p>Unlike <code>requests</code>, the <code>httpx</code> package does not automatically pull in <a href="https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_default_verify_paths.html">the environment variables <code>SSL_CERT_FILE</code> or <code>SSL_CERT_DIR</code></a>. If you want to use these they need to be enabled explicitly.</p>
<p>For example...</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Use `SSL_CERT_FILE` or `SSL_CERT_DIR` if configured.</span>
<span class="c1"># Otherwise default to certifi.</span>
<span class="n">ctx</span> <span class="o">=</span> <span class="n">ssl</span><span class="o">.</span><span class="n">create_default_context</span><span class="p">(</span>
<span class="n">cafile</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;SSL_CERT_FILE&quot;</span><span class="p">,</span> <span class="n">certifi</span><span class="o">.</span><span class="n">where</span><span class="p">()),</span>
<span class="n">capath</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;SSL_CERT_DIR&quot;</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">verify</span><span class="o">=</span><span class="n">ctx</span><span class="p">)</span>
</code></pre></div>
<p><code>httpx</code> does respect the <code>SSL_CERT_FILE</code> and <code>SSL_CERT_DIR</code> environment variables by default. For details, refer to <a href="../../environment_variables/#ssl_cert_file">the section on the environment variables page</a>.</p>
<h3 id="making-https-requests-to-a-local-server">Making HTTPS requests to a local server</h3>
<p>When making requests to local servers, such as a development server running on <code>localhost</code>, you will typically be using unencrypted HTTP connections.</p>
<p>If you do need to make HTTPS connections to a local server, for example to test an HTTPS-only service, you will need to create and use your own certificates. Here's one way to do it...</p>

View File

@ -1064,7 +1064,7 @@
<p>In cases where no charset information is included on the response, the default behaviour is to assume "utf-8" encoding, which is by far the most widely used text encoding on the internet.</p>
<h2 id="using-the-default-encoding">Using the default encoding</h2>
<p>To understand this better let's start by looking at the default behaviour for text decoding...</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="c1"># Instantiate a client with the default configuration.</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">()</span>
<span class="c1"># Using the client...</span>
@ -1078,7 +1078,7 @@
<p>This is normally absolutely fine. Most servers will respond with a properly formatted Content-Type header, including a charset encoding. And in most cases where no charset encoding is included, UTF-8 is very likely to be used, since it is so widely adopted.</p>
<h2 id="using-an-explicit-encoding">Using an explicit encoding</h2>
<p>In some cases we might be making requests to a site where no character set information is being set explicitly by the server, but we know what the encoding is. In this case it's best to set the default encoding explicitly on the client.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="c1"># Instantiate a client with a Japanese character set as the default encoding.</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">default_encoding</span><span class="o">=</span><span class="s2">&quot;shift-jis&quot;</span><span class="p">)</span>
<span class="c1"># Using the client...</span>
@ -1103,10 +1103,10 @@ $<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </sp
</code></pre></div>
<p>Once <code>chardet</code> is installed, we can configure a client to use character-set autodetection.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">chardet</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">chardet</span>
<span class="k">def</span> <span class="nf">autodetect</span><span class="p">(</span><span class="n">content</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">autodetect</span><span class="p">(</span><span class="n">content</span><span class="p">):</span>
<span class="k">return</span> <span class="n">chardet</span><span class="o">.</span><span class="n">detect</span><span class="p">(</span><span class="n">content</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;encoding&quot;</span><span class="p">)</span>
<span class="c1"># Using a client with character-set autodetection enabled.</span>

View File

@ -1390,20 +1390,20 @@ sending of the requests.</p>
<p>For some advanced configuration you might need to instantiate a transport
class directly, and pass it to the client instance. One example is the
<code>local_address</code> configuration which is only available via this low-level API.</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">transport</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">HTTPTransport</span><span class="p">(</span><span class="n">local_address</span><span class="o">=</span><span class="s2">&quot;0.0.0.0&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">transport</span><span class="o">=</span><span class="n">transport</span><span class="p">)</span>
</code></pre></div>
<p>Connection retries are also available via this interface. Requests will be retried the given number of times in case an <code>httpx.ConnectError</code> or an <code>httpx.ConnectTimeout</code> occurs, allowing smoother operation under flaky networks. If you need other forms of retry behaviors, such as handling read/write errors or reacting to <code>503 Service Unavailable</code>, consider general-purpose tools such as <a href="https://github.com/jd/tenacity">tenacity</a>.</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">transport</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">HTTPTransport</span><span class="p">(</span><span class="n">retries</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">transport</span><span class="o">=</span><span class="n">transport</span><span class="p">)</span>
</code></pre></div>
<p>Similarly, instantiating a transport directly provides a <code>uds</code> option for
connecting via a Unix Domain Socket that is only available via this low-level API:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Connect to the Docker API via a Unix Socket.</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">transport</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">HTTPTransport</span><span class="p">(</span><span class="n">uds</span><span class="o">=</span><span class="s2">&quot;/var/run/docker.sock&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">transport</span><span class="o">=</span><span class="n">transport</span><span class="p">)</span>
@ -1421,14 +1421,14 @@ connecting via a Unix Domain Socket that is only available via this low-level AP
</ul>
<h3 id="example">Example</h3>
<p>Here's an example of integrating against a Flask application:</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">flask</span> <span class="kn">import</span> <span class="n">Flask</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">flask</span><span class="w"> </span><span class="kn">import</span> <span class="n">Flask</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">Flask</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
<span class="nd">@app</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">hello</span><span class="p">():</span>
<span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">():</span>
<span class="k">return</span> <span class="s2">&quot;Hello World!&quot;</span>
<span class="n">transport</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">WSGITransport</span><span class="p">(</span><span class="n">app</span><span class="o">=</span><span class="n">app</span><span class="p">)</span>
@ -1461,12 +1461,12 @@ connecting via a Unix Domain Socket that is only available via this low-level AP
</ul>
<h3 id="example_1">Example</h3>
<p>Let's take this Starlette application as an example:</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">starlette.applications</span> <span class="kn">import</span> <span class="n">Starlette</span>
<span class="kn">from</span> <span class="nn">starlette.responses</span> <span class="kn">import</span> <span class="n">HTMLResponse</span>
<span class="kn">from</span> <span class="nn">starlette.routing</span> <span class="kn">import</span> <span class="n">Route</span>
<div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">starlette.applications</span><span class="w"> </span><span class="kn">import</span> <span class="n">Starlette</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">starlette.responses</span><span class="w"> </span><span class="kn">import</span> <span class="n">HTMLResponse</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">starlette.routing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Route</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">hello</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">hello</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">return</span> <span class="n">HTMLResponse</span><span class="p">(</span><span class="s2">&quot;Hello World!&quot;</span><span class="p">)</span>
@ -1512,24 +1512,24 @@ use with <code>AsyncClient</code>.</p>
<p>See the <code>handle_request</code> and <code>handle_async_request</code> docstrings for more details
on the specifics of the Transport API.</p>
<p>A complete example of a custom transport implementation would be:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="k">class</span> <span class="nc">HelloWorldTransport</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="k">class</span><span class="w"> </span><span class="nc">HelloWorldTransport</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A mock transport that always returns a JSON &quot;Hello, world!&quot; response.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">return</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Response</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="s2">&quot;Hello, world!&quot;</span><span class="p">})</span>
</code></pre></div>
<p>Or this example, which uses a custom transport and <code>httpx.Mounts</code> to always redirect <code>http://</code> requests.</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">HTTPSRedirect</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">HTTPSRedirect</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A transport that always redirects to HTTPS.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">url</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">url</span><span class="o">.</span><span class="n">copy_with</span><span class="p">(</span><span class="n">scheme</span><span class="o">=</span><span class="s2">&quot;https&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Response</span><span class="p">(</span><span class="mi">303</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;Location&quot;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">url</span><span class="p">)})</span>
@ -1542,17 +1542,17 @@ on the specifics of the Transport API.</p>
</code></pre></div>
<p>A useful pattern here is custom transport classes that wrap the default HTTP implementation. For example...</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">DebuggingTransport</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">DebuggingTransport</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wrapper</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">HTTPTransport</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&gt;&gt;&gt; </span><span class="si">{</span><span class="n">request</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapper</span><span class="o">.</span><span class="n">handle_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&lt;&lt;&lt; </span><span class="si">{</span><span class="n">response</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">response</span>
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wrapper</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="n">transport</span> <span class="o">=</span> <span class="n">DebuggingTransport</span><span class="p">()</span>
@ -1560,20 +1560,20 @@ on the specifics of the Transport API.</p>
</code></pre></div>
<p>Here's another case, where we're using a round-robin across a number of different proxies...</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">ProxyRoundRobin</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">proxies</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">ProxyRoundRobin</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">proxies</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_transports</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">httpx</span><span class="o">.</span><span class="n">HTTPTransport</span><span class="p">(</span><span class="n">proxy</span><span class="o">=</span><span class="n">proxy</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">for</span> <span class="n">proxy</span> <span class="ow">in</span> <span class="n">proxies</span>
<span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_idx</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
<span class="n">transport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_transports</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_idx</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_idx</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_idx</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_transports</span><span class="p">)</span>
<span class="k">return</span> <span class="n">transport</span><span class="o">.</span><span class="n">handle_request</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">transport</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_transports</span><span class="p">:</span>
<span class="n">transport</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
@ -1591,7 +1591,7 @@ on the specifics of the Transport API.</p>
and return pre-determined responses, rather than making actual network requests.</p>
<p>The <code>httpx.MockTransport</code> class accepts a handler function, which can be used
to map requests onto pre-determined responses:</p>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">handler</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">handler</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">return</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Response</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="s2">&quot;Hello, world!&quot;</span><span class="p">})</span>
@ -1610,14 +1610,14 @@ mocking library, RESPX</a>, or the <a href="https://github.com/Colin-b/pytest_ht
<p>You can also mount transports against given schemes or domains, to control
which transport an outgoing request should be routed via, with <a href="#routing">the same style
used for specifying proxy routing</a>.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="k">class</span> <span class="nc">HTTPSRedirectTransport</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="k">class</span><span class="w"> </span><span class="nc">HTTPSRedirectTransport</span><span class="p">(</span><span class="n">httpx</span><span class="o">.</span><span class="n">BaseTransport</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A transport that always redirects to HTTPS.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="n">extensions</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handle_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">method</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="n">extensions</span><span class="p">):</span>
<span class="n">scheme</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="p">,</span> <span class="n">path</span> <span class="o">=</span> <span class="n">url</span>
<span class="k">if</span> <span class="n">port</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">location</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;https://</span><span class="si">%s%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
@ -1646,7 +1646,7 @@ used for specifying proxy routing</a>.</p>
<p>Mocking requests to a given domain:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># All requests to &quot;example.org&quot; should be mocked out.</span>
<span class="c1"># Other requests occur as usual.</span>
<span class="k">def</span> <span class="nf">handler</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">handler</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">return</span> <span class="n">httpx</span><span class="o">.</span><span class="n">Response</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="s2">&quot;Hello, World!&quot;</span><span class="p">})</span>
<span class="n">mounts</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;all://example.org&quot;</span><span class="p">:</span> <span class="n">httpx</span><span class="o">.</span><span class="n">MockTransport</span><span class="p">(</span><span class="n">handler</span><span class="p">)}</span>

View File

@ -868,6 +868,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#proxy" class="md-nav__link">
<span class="md-ellipsis">
Proxy
</span>
</a>
</li>
</ul>
@ -1136,6 +1145,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#proxy" class="md-nav__link">
<span class="md-ellipsis">
Proxy
</span>
</a>
</li>
</ul>
@ -1198,10 +1216,10 @@ variables for configuration.</li>
</ul>
<p><strong>Returns:</strong> <code>Response</code></p>
<p>Usage:</p>
<div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">httpx</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s1">&#39;GET&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;https://httpbin.org/get&#39;</span><span class="p">)</span>
<span class="o">&gt;&gt;&gt;</span><span class="w"> </span><span class="n">response</span>
<span class="o">&lt;</span><span class="n">Response</span><span class="w"> </span><span class="p">[</span><span class="mi">200</span><span class="w"> </span><span class="n">OK</span><span class="p">]</span><span class="o">&gt;</span>
<div class="highlight"><pre><span></span><code><span class="o">&gt;&gt;&gt;</span> <span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">response</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s1">&#39;GET&#39;</span><span class="p">,</span> <span class="s1">&#39;https://httpbin.org/get&#39;</span><span class="p">)</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">response</span>
<span class="o">&lt;</span><span class="n">Response</span> <span class="p">[</span><span class="mi">200</span> <span class="n">OK</span><span class="p">]</span><span class="o">&gt;</span>
</code></pre></div></div>
</div>
<div class="autodoc">
@ -1305,7 +1323,7 @@ header. Set to a callable for automatic character set detection. Default: "utf-8
<div class="autodoc-signature"><code><strong>auth</strong></code></div>
<div class="autodoc-docstring"><p>Authentication class used when none is passed at the request-level.</p>
<p>See also <a href="/quickstart/#authentication">Authentication</a>.</p></div>
<div class="autodoc-signature"><code><strong>request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Build and send a request.</p>
<p>Equivalent to:</p>
<div class="highlight"><pre><span></span><code><span class="n">request</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">build_request</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
@ -1315,33 +1333,33 @@ header. Set to a callable for automatic character set detection. Default: "utf-8
<p>See <code>Client.build_request()</code>, <code>Client.send()</code> and
<a href="/advanced/clients/#merging-of-configuration">Merging of configuration</a> for how the various parameters
are merged with client-level configuration.</p></div>
<div class="autodoc-signature"><code><strong>get</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>get</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>GET</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>head</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>head</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>HEAD</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>options</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>options</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send an <code>OPTIONS</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>post</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>post</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>POST</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>put</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>put</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>PUT</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>patch</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>patch</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>PATCH</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>delete</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>delete</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>DELETE</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>stream</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>stream</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Alternative to <code>httpx.request()</code> that streams the response body
instead of loading it into memory at once.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p>
<p>See also: <a href="/quickstart#streaming-responses">Streaming Responses</a></p></div>
<div class="autodoc-signature"><code><strong>build_request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>build_request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Build and return a request instance.</p>
<ul>
<li>The <code>params</code>, <code>headers</code> and <code>cookies</code> arguments
@ -1349,7 +1367,7 @@ are merged with any values set on the client.</li>
<li>The <code>url</code> argument is merged with any <code>base_url</code> set on the client.</li>
</ul>
<p>See also: <a href="/advanced/clients/#request-instances">Request instances</a></p></div>
<div class="autodoc-signature"><code><strong>send</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">request</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">stream=False</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>send</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">request</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">stream=False</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a request.</p>
<p>The request is sent as-is, unmodified.</p>
<p>Typically you'll want to build one with <code>Client.build_request()</code>
@ -1412,7 +1430,7 @@ header. Set to a callable for automatic character set detection. Default: "utf-8
<div class="autodoc-signature"><code><strong>auth</strong></code></div>
<div class="autodoc-docstring"><p>Authentication class used when none is passed at the request-level.</p>
<p>See also <a href="/quickstart/#authentication">Authentication</a>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Build and send a request.</p>
<p>Equivalent to:</p>
<div class="highlight"><pre><span></span><code><span class="n">request</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">build_request</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
@ -1422,33 +1440,33 @@ header. Set to a callable for automatic character set detection. Default: "utf-8
<p>See <code>AsyncClient.build_request()</code>, <code>AsyncClient.send()</code>
and <a href="/advanced/clients/#merging-of-configuration">Merging of configuration</a> for how the various parameters
are merged with client-level configuration.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>get</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>get</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>GET</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>head</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>head</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>HEAD</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>options</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>options</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send an <code>OPTIONS</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>post</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>post</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>POST</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>put</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>put</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>PUT</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>patch</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>patch</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>PATCH</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><em>async </em><code><strong>delete</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>delete</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a <code>DELETE</code> request.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p></div>
<div class="autodoc-signature"><code><strong>stream</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>stream</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Alternative to <code>httpx.request()</code> that streams the response body
instead of loading it into memory at once.</p>
<p><strong>Parameters</strong>: See <code>httpx.request</code>.</p>
<p>See also: <a href="/quickstart#streaming-responses">Streaming Responses</a></p></div>
<div class="autodoc-signature"><code><strong>build_request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><code><strong>build_request</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">method</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">url</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">content=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">data=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">files=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">json=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">params=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">headers=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">cookies=None</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">timeout=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">extensions=None</em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Build and return a request instance.</p>
<ul>
<li>The <code>params</code>, <code>headers</code> and <code>cookies</code> arguments
@ -1456,7 +1474,7 @@ are merged with any values set on the client.</li>
<li>The <code>url</code> argument is merged with any <code>base_url</code> set on the client.</li>
</ul>
<p>See also: <a href="/advanced/clients/#request-instances">Request instances</a></p></div>
<div class="autodoc-signature"><em>async </em><code><strong>send</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">request</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">stream=False</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x7fbd8b024e50></em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-signature"><em>async </em><code><strong>send</strong></code><span class="autodoc-punctuation">(</span><em class="autodoc-param">self</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">request</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">*</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">stream=False</em><span class="autodoc-punctuation">, </span><em class="autodoc-param">auth=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">, </span><em class="autodoc-param">follow_redirects=<httpx._client.UseClientDefault object at 0x1045fe270></em><span class="autodoc-punctuation">)</span></div>
<div class="autodoc-docstring"><p>Send a request.</p>
<p>The request is sent as-is, unmodified.</p>
<p>Typically you'll want to build one with <code>AsyncClient.build_request()</code>
@ -1570,6 +1588,19 @@ what gets sent over the wire.</em></p>
<li><code>def clear([domain], [path])</code></li>
<li><em>Standard mutable mapping interface</em></li>
</ul>
<h2 id="proxy"><code>Proxy</code></h2>
<p><em>A configuration of the proxy server.</em></p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">proxy</span> <span class="o">=</span> <span class="n">Proxy</span><span class="p">(</span><span class="s2">&quot;http://proxy.example.com:8030&quot;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">proxy</span><span class="o">=</span><span class="n">proxy</span><span class="p">)</span>
</code></pre></div>
<ul>
<li><code>def __init__(url, [ssl_context], [auth], [headers])</code></li>
<li><code>.url</code> - <strong>URL</strong></li>
<li><code>.auth</code> - <strong>tuple[str, str]</strong></li>
<li><code>.headers</code> - <strong>Headers</strong></li>
<li><code>.ssl_context</code> - <strong>SSLContext</strong></li>
</ul>

View File

@ -1268,7 +1268,7 @@ async client for sending outgoing HTTP requests.</p>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Use <a href="https://ipython.readthedocs.io/en/stable/">IPython</a> or Python 3.8+ with <code>python -m asyncio</code> to try this code interactively, as they support executing <code>async</code>/<code>await</code> expressions in the console.</p>
<p>Use <a href="https://ipython.readthedocs.io/en/stable/">IPython</a> or Python 3.9+ with <code>python -m asyncio</code> to try this code interactively, as they support executing <code>async</code>/<code>await</code> expressions in the console.</p>
</div>
<h2 id="api-differences">API Differences</h2>
<p>If you're using an async client then there are a few bits of API that
@ -1321,13 +1321,13 @@ use async methods.</p>
</ul>
<p>For situations when context block usage is not practical, it is possible to enter "manual mode" by sending a <a href="../advanced/clients/#request-instances"><code>Request</code> instance</a> using <code>client.send(..., stream=True)</code>.</p>
<p>Example in the context of forwarding the response to a streaming web endpoint with <a href="https://www.starlette.io">Starlette</a>:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">from</span> <span class="nn">starlette.background</span> <span class="kn">import</span> <span class="n">BackgroundTask</span>
<span class="kn">from</span> <span class="nn">starlette.responses</span> <span class="kn">import</span> <span class="n">StreamingResponse</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">starlette.background</span><span class="w"> </span><span class="kn">import</span> <span class="n">BackgroundTask</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">starlette.responses</span><span class="w"> </span><span class="kn">import</span> <span class="n">StreamingResponse</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">()</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">home</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">home</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
<span class="n">req</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">build_request</span><span class="p">(</span><span class="s2">&quot;GET&quot;</span><span class="p">,</span> <span class="s2">&quot;https://www.example.com/&quot;</span><span class="p">)</span>
<span class="n">r</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">,</span> <span class="n">stream</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">StreamingResponse</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">aiter_text</span><span class="p">(),</span> <span class="n">background</span><span class="o">=</span><span class="n">BackgroundTask</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">aclose</span><span class="p">))</span>
@ -1339,7 +1339,7 @@ use async methods.</p>
</div>
<h3 id="streaming-requests">Streaming requests</h3>
<p>When sending a streaming request body with an <code>AsyncClient</code> instance, you should use an async bytes generator instead of a bytes generator:</p>
<div class="highlight"><pre><span></span><code><span class="k">async</span> <span class="k">def</span> <span class="nf">upload_bytes</span><span class="p">():</span>
<div class="highlight"><pre><span></span><code><span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">upload_bytes</span><span class="p">():</span>
<span class="o">...</span> <span class="c1"># yield byte content</span>
<span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">content</span><span class="o">=</span><span class="n">upload_bytes</span><span class="p">())</span>
@ -1348,7 +1348,7 @@ use async methods.</p>
<h3 id="explicit-transport-instances">Explicit transport instances</h3>
<p>When instantiating a transport instance directly, you need to use <code>httpx.AsyncHTTPTransport</code>.</p>
<p>For instance:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">transport</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncHTTPTransport</span><span class="p">(</span><span class="n">retries</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">async</span> <span class="k">with</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">(</span><span class="n">transport</span><span class="o">=</span><span class="n">transport</span><span class="p">)</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
<span class="gp">&gt;&gt;&gt; </span> <span class="o">...</span>
@ -1361,10 +1361,10 @@ for socket operations and concurrency primitives.</p>
<h3 id="asyncio"><a href="https://docs.python.org/3/library/asyncio.html">AsyncIO</a></h3>
<p>AsyncIO is Python's <a href="https://docs.python.org/3/library/asyncio.html">built-in library</a>
for writing concurrent code with the async/await syntax.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">asyncio</span>
<span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">asyncio</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
<span class="k">async</span> <span class="k">with</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">()</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;https://www.example.com/&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
@ -1375,10 +1375,10 @@ for writing concurrent code with the async/await syntax.</p>
<h3 id="trio"><a href="https://github.com/python-trio/trio">Trio</a></h3>
<p>Trio is <a href="https://trio.readthedocs.io/en/stable/">an alternative async library</a>,
designed around the <a href="https://en.wikipedia.org/wiki/Structured_concurrency">the principles of structured concurrency</a>.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">trio</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">trio</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
<span class="k">async</span> <span class="k">with</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">()</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;https://www.example.com/&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
@ -1392,10 +1392,10 @@ designed around the <a href="https://en.wikipedia.org/wiki/Structured_concurrenc
</div>
<h3 id="anyio"><a href="https://github.com/agronholm/anyio">AnyIO</a></h3>
<p>AnyIO is an <a href="https://anyio.readthedocs.io/">asynchronous networking and concurrency library</a> that works on top of either <code>asyncio</code> or <code>trio</code>. It blends in with native libraries of your chosen backend (defaults to <code>asyncio</code>).</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">httpx</span>
<span class="kn">import</span> <span class="nn">anyio</span>
<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">anyio</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
<span class="k">async</span> <span class="k">with</span> <span class="n">httpx</span><span class="o">.</span><span class="n">AsyncClient</span><span class="p">()</span> <span class="k">as</span> <span class="n">client</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;https://www.example.com/&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>

View File

@ -901,6 +901,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#exceptions-and-errors" class="md-nav__link">
<span class="md-ellipsis">
Exceptions and Errors
</span>
</a>
</li>
</ul>
@ -1370,6 +1379,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#exceptions-and-errors" class="md-nav__link">
<span class="md-ellipsis">
Exceptions and Errors
</span>
</a>
</li>
</ul>
@ -1532,6 +1550,8 @@ For more detailed documentation, see <a href="../advanced/transports/#mounting-t
<p><code>requests</code> allows event hooks to mutate <code>Request</code> and <code>Response</code> objects. See <a href="https://requests.readthedocs.io/en/master/user/advanced/#event-hooks">examples</a> given in the documentation for <code>requests</code>.</p>
<p>In HTTPX, event hooks may access properties of requests and responses, but event hook callbacks cannot mutate the original request/response.</p>
<p>If you are looking for more control, consider checking out <a href="../advanced/transports/#custom-transports">Custom Transports</a>.</p>
<h2 id="exceptions-and-errors">Exceptions and Errors</h2>
<p><code>requests</code> exception hierarchy is slightly different to the <code>httpx</code> exception hierarchy. <code>requests</code> exposes a top level <code>RequestException</code>, where as <code>httpx</code> exposes a top level <code>HTTPError</code>. see the exceptions exposes in requests <a href="https://requests.readthedocs.io/en/latest/_modules/requests/exceptions/">here</a>. See the <code>httpx</code> error hierarchy <a href="https://www.python-httpx.org/exceptions/">here</a>.</p>

View File

@ -871,6 +871,24 @@
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssl_cert_file" class="md-nav__link">
<span class="md-ellipsis">
SSL_CERT_FILE
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssl_cert_dir" class="md-nav__link">
<span class="md-ellipsis">
SSL_CERT_DIR
</span>
</a>
</li>
</ul>
@ -1058,6 +1076,24 @@
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssl_cert_file" class="md-nav__link">
<span class="md-ellipsis">
SSL_CERT_FILE
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssl_cert_dir" class="md-nav__link">
<span class="md-ellipsis">
SSL_CERT_DIR
</span>
</a>
</li>
</ul>
@ -1116,6 +1152,22 @@ python<span class="w"> </span>-c<span class="w"> </span><span class="s2">&quot;i
python<span class="w"> </span>-c<span class="w"> </span><span class="s2">&quot;import httpx; httpx.get(&#39;https://www.python-httpx.org&#39;)&quot;</span>
</code></pre></div>
<h2 id="ssl_cert_file"><code>SSL_CERT_FILE</code></h2>
<p>Valid values: a filename</p>
<p>If this environment variable is set then HTTPX will load
CA certificate from the specified file instead of the default
location.</p>
<p>Example:</p>
<div class="highlight"><pre><span></span><code><span class="go">SSL_CERT_FILE=/path/to/ca-certs/ca-bundle.crt python -c &quot;import httpx; httpx.get(&#39;https://example.com&#39;)&quot;</span>
</code></pre></div>
<h2 id="ssl_cert_dir"><code>SSL_CERT_DIR</code></h2>
<p>Valid values: a directory following an <a href="https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html">OpenSSL specific layout</a>.</p>
<p>If this environment variable is set and the directory follows an <a href="https://www.openssl.org/docs/manmaster/man3/SSL_CTX_load_verify_locations.html">OpenSSL specific layout</a> (ie. you ran <code>c_rehash</code>) then HTTPX will load CA certificates from this directory instead of the default location.</p>
<p>Example:</p>
<div class="highlight"><pre><span></span><code><span class="go">SSL_CERT_DIR=/path/to/ca-certs/ python -c &quot;import httpx; httpx.get(&#39;https://example.com&#39;)&quot;</span>
</code></pre></div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -1100,7 +1100,7 @@ HTTPX
</code></pre></div>
<p>Now, let's get started:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;https://www.example.org/&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span>
<span class="go">&lt;Response [200 OK]&gt;</span>
@ -1190,7 +1190,7 @@ inspiration around the lower-level networking details.</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>httpx<span class="o">[</span>brotli,zstd<span class="o">]</span>
</code></pre></div>
<p>HTTPX requires Python 3.8+</p>
<p>HTTPX requires Python 3.9+</p>

File diff suppressed because one or more lines are too long

View File

@ -1315,7 +1315,7 @@
<h1 id="quickstart">QuickStart</h1>
<p>First, start by importing HTTPX:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">httpx</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span><span class="w"> </span><span class="nn">httpx</span>
</code></pre></div>
<p>Now, lets try to get a webpage.</p>
@ -1390,8 +1390,8 @@ be decoded for you. If <code>brotlipy</code> is installed, then the <code>brotli
encoding will be supported. If <code>zstandard</code> is installed, then <code>zstd</code>
response encodings will also be supported.</p>
<p>For example, to create an image from binary data returned by a request, you can use the following code:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">BytesIO</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">PIL</span><span class="w"> </span><span class="kn">import</span> <span class="n">Image</span>
<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span><span class="w"> </span><span class="nn">io</span><span class="w"> </span><span class="kn">import</span> <span class="n">BytesIO</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">i</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">BytesIO</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">content</span><span class="p">))</span>
</code></pre></div>
@ -1444,8 +1444,9 @@ which is used for HTML forms.</p>
<h2 id="sending-multipart-file-uploads">Sending Multipart File Uploads</h2>
<p>You can also upload files, using HTTP multipart encoding:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;upload-file&#39;</span><span class="p">:</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">report_file</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;upload-file&#39;</span><span class="p">:</span> <span class="n">report_file</span><span class="p">}</span>
<span class="gp">... </span> <span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<span class="go">{</span>
<span class="go"> ...</span>
@ -1458,8 +1459,9 @@ which is used for HTML forms.</p>
<p>You can also explicitly set the filename and content type, by using a tuple
of items for the file value:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;upload-file&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">),</span> <span class="s1">&#39;application/vnd.ms-excel&#39;</span><span class="p">)}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="n">report_file</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;upload-file&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="n">report_file</span><span class="p">,</span> <span class="s1">&#39;application/vnd.ms-excel&#39;</span><span class="p">)}</span>
<span class="gp">... </span> <span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<span class="go">{</span>
<span class="go"> ...</span>
@ -1472,8 +1474,9 @@ of items for the file value:</p>
<p>If you need to include non-file data fields in the multipart form, use the <code>data=...</code> parameter:</p>
<div class="highlight"><pre><span></span><code><span class="gp">&gt;&gt;&gt; </span><span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;Hello, world!&#39;</span><span class="p">}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)}</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;report.xls&#39;</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">report_file</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="n">report_file</span><span class="p">}</span>
<span class="gp">... </span> <span class="n">r</span> <span class="o">=</span> <span class="n">httpx</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;https://httpbin.org/post&quot;</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
<span class="go">{</span>
<span class="go"> ...</span>

File diff suppressed because one or more lines are too long

View File

@ -2,94 +2,94 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.python-httpx.org/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/api/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/async/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/code_of_conduct/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/compatibility/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/contributing/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/environment_variables/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/exceptions/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/http2/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/logging/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/quickstart/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/third_party_packages/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/troubleshooting/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/authentication/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/clients/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/event-hooks/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/extensions/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/proxies/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/resource-limits/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/ssl/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/text-encodings/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/timeouts/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
<url>
<loc>https://www.python-httpx.org/advanced/transports/</loc>
<lastmod>2024-12-06</lastmod>
<lastmod>2025-09-11</lastmod>
</url>
</urlset>

Binary file not shown.

View File

@ -914,9 +914,36 @@
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#httpx-ws" class="md-nav__link">
<a href="#hishel" class="md-nav__link">
<span class="md-ellipsis">
httpx-ws
Hishel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-auth" class="md-nav__link">
<span class="md-ellipsis">
HTTPX-Auth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-caching" class="md-nav__link">
<span class="md-ellipsis">
httpx-caching
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-secure" class="md-nav__link">
<span class="md-ellipsis">
httpx-secure
</span>
</a>
@ -932,36 +959,27 @@
</li>
<li class="md-nav__item">
<a href="#hishel" class="md-nav__link">
<a href="#httpx-sse" class="md-nav__link">
<span class="md-ellipsis">
Hishel
httpx-sse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#authlib" class="md-nav__link">
<a href="#httpx-retries" class="md-nav__link">
<span class="md-ellipsis">
Authlib
httpx-retries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#gidgethub" class="md-nav__link">
<a href="#httpx-ws" class="md-nav__link">
<span class="md-ellipsis">
Gidgethub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-auth" class="md-nav__link">
<span class="md-ellipsis">
HTTPX-Auth
httpx-ws
</span>
</a>
@ -992,6 +1010,48 @@
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#libraries-with-httpx-support" class="md-nav__link">
<span class="md-ellipsis">
Libraries with HTTPX support
</span>
</a>
<nav class="md-nav" aria-label="Libraries with HTTPX support">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#authlib" class="md-nav__link">
<span class="md-ellipsis">
Authlib
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#gidgethub" class="md-nav__link">
<span class="md-ellipsis">
Gidgethub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpdbg" class="md-nav__link">
<span class="md-ellipsis">
httpdbg
</span>
</a>
</li>
<li class="md-nav__item">
@ -1001,33 +1061,6 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-caching" class="md-nav__link">
<span class="md-ellipsis">
httpx-caching
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-sse" class="md-nav__link">
<span class="md-ellipsis">
httpx-sse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#robox" class="md-nav__link">
<span class="md-ellipsis">
robox
</span>
</a>
</li>
</ul>
@ -1161,9 +1194,36 @@
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#httpx-ws" class="md-nav__link">
<a href="#hishel" class="md-nav__link">
<span class="md-ellipsis">
httpx-ws
Hishel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-auth" class="md-nav__link">
<span class="md-ellipsis">
HTTPX-Auth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-caching" class="md-nav__link">
<span class="md-ellipsis">
httpx-caching
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-secure" class="md-nav__link">
<span class="md-ellipsis">
httpx-secure
</span>
</a>
@ -1179,36 +1239,27 @@
</li>
<li class="md-nav__item">
<a href="#hishel" class="md-nav__link">
<a href="#httpx-sse" class="md-nav__link">
<span class="md-ellipsis">
Hishel
httpx-sse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#authlib" class="md-nav__link">
<a href="#httpx-retries" class="md-nav__link">
<span class="md-ellipsis">
Authlib
httpx-retries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#gidgethub" class="md-nav__link">
<a href="#httpx-ws" class="md-nav__link">
<span class="md-ellipsis">
Gidgethub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-auth" class="md-nav__link">
<span class="md-ellipsis">
HTTPX-Auth
httpx-ws
</span>
</a>
@ -1239,6 +1290,48 @@
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#libraries-with-httpx-support" class="md-nav__link">
<span class="md-ellipsis">
Libraries with HTTPX support
</span>
</a>
<nav class="md-nav" aria-label="Libraries with HTTPX support">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#authlib" class="md-nav__link">
<span class="md-ellipsis">
Authlib
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#gidgethub" class="md-nav__link">
<span class="md-ellipsis">
Gidgethub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpdbg" class="md-nav__link">
<span class="md-ellipsis">
httpdbg
</span>
</a>
</li>
<li class="md-nav__item">
@ -1248,33 +1341,6 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-caching" class="md-nav__link">
<span class="md-ellipsis">
httpx-caching
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#httpx-sse" class="md-nav__link">
<span class="md-ellipsis">
httpx-sse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#robox" class="md-nav__link">
<span class="md-ellipsis">
robox
</span>
</a>
</li>
</ul>
@ -1323,49 +1389,56 @@
<h1 id="third-party-packages">Third Party Packages</h1>
<p>As HTTPX usage grows, there is an expanding community of developers building tools and libraries that integrate with HTTPX, or depend on HTTPX. Here are some of them.</p>
<!-- NOTE: Entries are alphabetised. -->
<h2 id="plugins">Plugins</h2>
<h3 id="httpx-ws">httpx-ws</h3>
<p><a href="https://github.com/frankie567/httpx-ws">GitHub</a> - <a href="https://frankie567.github.io/httpx-ws/">Documentation</a></p>
<p>WebSocket support for HTTPX.</p>
<h3 id="httpx-socks">httpx-socks</h3>
<p><a href="https://github.com/romis2012/httpx-socks">GitHub</a></p>
<p>Proxy (HTTP, SOCKS) transports for httpx.</p>
<h3 id="hishel">Hishel</h3>
<p><a href="https://github.com/karpetrosyan/hishel">GitHub</a> - <a href="https://hishel.com/">Documentation</a></p>
<p>An elegant HTTP Cache implementation for HTTPX and HTTP Core.</p>
<h3 id="authlib">Authlib</h3>
<p><a href="https://github.com/lepture/authlib">GitHub</a> - <a href="https://docs.authlib.org/en/latest/">Documentation</a></p>
<p>The ultimate Python library in building OAuth and OpenID Connect clients and servers. Includes an <a href="https://docs.authlib.org/en/latest/client/httpx.html">OAuth HTTPX client</a>.</p>
<h3 id="gidgethub">Gidgethub</h3>
<p><a href="https://github.com/brettcannon/gidgethub">GitHub</a> - <a href="https://gidgethub.readthedocs.io/en/latest/index.html">Documentation</a></p>
<p>An asynchronous GitHub API library. Includes <a href="https://gidgethub.readthedocs.io/en/latest/httpx.html">HTTPX support</a>.</p>
<h3 id="httpx-auth">HTTPX-Auth</h3>
<p><a href="https://github.com/Colin-b/httpx_auth">GitHub</a> - <a href="https://colin-b.github.io/httpx_auth/">Documentation</a></p>
<p>Provides authentication classes to be used with HTTPX <a href="../advanced/authentication/#customizing-authentication">authentication parameter</a>.</p>
<h3 id="pytest-httpx">pytest-HTTPX</h3>
<p><a href="https://github.com/Colin-b/pytest_httpx">GitHub</a> - <a href="https://colin-b.github.io/pytest_httpx/">Documentation</a></p>
<p>Provides <code>httpx_mock</code> <a href="https://docs.pytest.org/en/latest/">pytest</a> fixture to mock HTTPX within test cases.</p>
<h3 id="respx">RESPX</h3>
<p><a href="https://github.com/lundberg/respx">GitHub</a> - <a href="https://lundberg.github.io/respx/">Documentation</a></p>
<p>A utility for mocking out the Python HTTPX library.</p>
<h3 id="rpcpy">rpc.py</h3>
<p><a href="https://github.com/abersheeran/rpc.py">Github</a> - <a href="https://github.com/abersheeran/rpc.py#rpcpy">Documentation</a></p>
<p>An fast and powerful RPC framework based on ASGI/WSGI. Use HTTPX as the client of the RPC service.</p>
<h3 id="vcrpy">VCR.py</h3>
<p><a href="https://github.com/kevin1024/vcrpy">GitHub</a> - <a href="https://vcrpy.readthedocs.io/">Documentation</a></p>
<p>A utility for record and repeat an http request.</p>
<p>Provides authentication classes to be used with HTTPX's <a href="../advanced/authentication/#customizing-authentication">authentication parameter</a>.</p>
<h3 id="httpx-caching">httpx-caching</h3>
<p><a href="https://github.com/johtso/httpx-caching">Github</a></p>
<p>This package adds caching functionality to HTTPX</p>
<h3 id="httpx-secure">httpx-secure</h3>
<p><a href="https://github.com/Zaczero/httpx-secure">GitHub</a></p>
<p>Drop-in SSRF protection for httpx with DNS caching and custom validation support.</p>
<h3 id="httpx-socks">httpx-socks</h3>
<p><a href="https://github.com/romis2012/httpx-socks">GitHub</a></p>
<p>Proxy (HTTP, SOCKS) transports for httpx.</p>
<h3 id="httpx-sse">httpx-sse</h3>
<p><a href="https://github.com/florimondmanca/httpx-sse">GitHub</a></p>
<p>Allows consuming Server-Sent Events (SSE) with HTTPX.</p>
<h3 id="robox">robox</h3>
<p><a href="https://github.com/danclaudiupop/robox">Github</a></p>
<p>A library for scraping the web built on top of HTTPX.</p>
<h3 id="httpx-retries">httpx-retries</h3>
<p><a href="https://github.com/will-ockmore/httpx-retries">GitHub</a> - <a href="https://will-ockmore.github.io/httpx-retries/">Documentation</a></p>
<p>A retry layer for HTTPX.</p>
<h3 id="httpx-ws">httpx-ws</h3>
<p><a href="https://github.com/frankie567/httpx-ws">GitHub</a> - <a href="https://frankie567.github.io/httpx-ws/">Documentation</a></p>
<p>WebSocket support for HTTPX.</p>
<h3 id="pytest-httpx">pytest-HTTPX</h3>
<p><a href="https://github.com/Colin-b/pytest_httpx">GitHub</a> - <a href="https://colin-b.github.io/pytest_httpx/">Documentation</a></p>
<p>Provides a <a href="https://docs.pytest.org/en/latest/">pytest</a> fixture to mock HTTPX within test cases.</p>
<h3 id="respx">RESPX</h3>
<p><a href="https://github.com/lundberg/respx">GitHub</a> - <a href="https://lundberg.github.io/respx/">Documentation</a></p>
<p>A utility for mocking out HTTPX.</p>
<h3 id="rpcpy">rpc.py</h3>
<p><a href="https://github.com/abersheeran/rpc.py">Github</a> - <a href="https://github.com/abersheeran/rpc.py#rpcpy">Documentation</a></p>
<p>A fast and powerful RPC framework based on ASGI/WSGI. Use HTTPX as the client of the RPC service.</p>
<h2 id="libraries-with-httpx-support">Libraries with HTTPX support</h2>
<h3 id="authlib">Authlib</h3>
<p><a href="https://github.com/lepture/authlib">GitHub</a> - <a href="https://docs.authlib.org/en/latest/">Documentation</a></p>
<p>A python library for building OAuth and OpenID Connect clients and servers. Includes an <a href="https://docs.authlib.org/en/latest/client/httpx.html">OAuth HTTPX client</a>.</p>
<h3 id="gidgethub">Gidgethub</h3>
<p><a href="https://github.com/brettcannon/gidgethub">GitHub</a> - <a href="https://gidgethub.readthedocs.io/en/latest/index.html">Documentation</a></p>
<p>An asynchronous GitHub API library. Includes <a href="https://gidgethub.readthedocs.io/en/latest/httpx.html">HTTPX support</a>.</p>
<h3 id="httpdbg">httpdbg</h3>
<p><a href="https://github.com/cle-b/httpdbg">GitHub</a> - <a href="https://httpdbg.readthedocs.io/">Documentation</a></p>
<p>A tool for python developers to easily debug the HTTP(S) client requests in a python program.</p>
<h3 id="vcrpy">VCR.py</h3>
<p><a href="https://github.com/kevin1024/vcrpy">GitHub</a> - <a href="https://vcrpy.readthedocs.io/">Documentation</a></p>
<p>Record and repeat requests.</p>
<h2 id="gists">Gists</h2>
<!-- NOTE: this list is in alphabetical order. -->
<h3 id="urllib3-transport">urllib3-transport</h3>
<p><a href="https://gist.github.com/florimondmanca/d56764d78d748eb9f73165da388e546e">GitHub</a></p>
<p>This public gist provides an example implementation for a <a href="../advanced/transports/#custom-transports">custom transport</a> implementation on top of the battle-tested <a href="https://urllib3.readthedocs.io"><code>urllib3</code></a> library.</p>