Files
ngrok-api-python/docs/errors.html
T
2022-04-15 16:43:13 -07:00

329 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html class="no-js">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Abuse Reports" href="abuse_reports.html" /><link rel="prev" title="Datatypes" href="datatypes.html" />
<meta name="generator" content="sphinx-3.5.4, furo 2021.04.11.beta34"/>
<title>Errors - ngrok-api documentation</title>
<link rel="stylesheet" href="_static/styles/furo.css?digest=59ab60ac09ea94ccfe6deddff6d715cce948a6fc">
<link rel="stylesheet" href="_static/pygments.css">
<link media="(prefers-color-scheme: dark)" rel="stylesheet" href="_static/pygments_dark.css">
<style>
:root {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
@media (prefers-color-scheme: dark) {
:root {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
}
/* For allowing end-user-specific overrides */
.override-light {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
.override-dark {
--color-code-background: #202020;
--color-code-foreground: #d0d0d0;
}
</style><link rel="stylesheet" href="_static/styles/furo-extensions.css?digest=d391b54134226e4196576da3bdb6dddb7e05ba2b"></head>
<body dir="">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke-width="1.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z"/>
<line x1="4" y1="6" x2="20" y2="6" />
<line x1="10" y1="12" x2="20" y2="12" />
<line x1="6" y1="18" x2="20" y2="18" />
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="feather feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation"></label>
<label class="overlay toc-overlay" for="__toc"></label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="index.html"><div class="brand">ngrok-api documentation</div></a>
</div>
<div class="header-right">
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<span class="sidebar-brand-text">ngrok-api documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html">
<input class="sidebar-search" placeholder=Search name="q">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form><div class="sidebar-scroll"><div class="sidebar-tree">
<p class="caption"><span class="caption-text">API</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="client.html">Client</a></li>
<li class="toctree-l1"><a class="reference internal" href="datatypes.html">Datatypes</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Errors</a></li>
</ul>
<p class="caption"><span class="caption-text">Services</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="abuse_reports.html">Abuse Reports</a></li>
<li class="toctree-l1"><a class="reference internal" href="agent_ingresses.html">Agent Ingresses</a></li>
<li class="toctree-l1"><a class="reference internal" href="api_keys.html">API Keys</a></li>
<li class="toctree-l1"><a class="reference internal" href="failover_backends.html">Failover Backends</a></li>
<li class="toctree-l1"><a class="reference internal" href="http_response_backends.html">HTTP Response Backends</a></li>
<li class="toctree-l1"><a class="reference internal" href="tunnel_group_backends.html">Tunnel Group Backends</a></li>
<li class="toctree-l1"><a class="reference internal" href="weighted_backends.html">Weighted Backends</a></li>
<li class="toctree-l1"><a class="reference internal" href="certificate_authorities.html">Certificate Authorities</a></li>
<li class="toctree-l1"><a class="reference internal" href="credentials.html">Tunnel Credentials</a></li>
<li class="toctree-l1"><a class="reference internal" href="edges_https_routes.html">HTTPS Edge Routes</a></li>
<li class="toctree-l1"><a class="reference internal" href="edges_https.html">HTTPS Edges</a></li>
<li class="toctree-l1"><a class="reference internal" href="https_edge_mutual_tls_module.html">HTTPS Edge Mutual TLS Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="https_edge_tls_termination_module.html">HTTPS Edge TLS Termination Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_backend_module.html">HTTPS Edge Route Backend Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_ip_restriction_module.html">HTTPS Edge Route IP Restriction Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_request_headers_module.html">HTTPS Edge Route Request Headers Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_response_headers_module.html">HTTPS Edge Route Response Headers Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_compression_module.html">HTTPS Edge Route Compression Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_circuit_breaker_module.html">HTTPS Edge Route Circuit Breaker Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_webhook_verification_module.html">HTTPS Edge Route Webhook Verification Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_o_auth_module.html">HTTPS Edge Route OAuth Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_saml_module.html">HTTPS Edge Route SAML Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_oidc_module.html">HTTPS Edge Route OIDC Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edge_route_websocket_tcp_converter_module.html">HTTPS Edge Route Websocket TCP Converter Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edges_tcp.html">TCP Edges</a></li>
<li class="toctree-l1"><a class="reference internal" href="tcp_edge_backend_module.html">TCP Edge Backend Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="tcp_edge_ip_restriction_module.html">TCP Edge IP Restriction Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="edges_tls.html">TLS Edges</a></li>
<li class="toctree-l1"><a class="reference internal" href="tls_edge_backend_module.html">TLS Edge Backend Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="tls_edge_ip_restriction_module.html">TLS Edge IP Restriction Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="tls_edge_mutual_tls_module.html">TLS Edge Mutual TLS Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="tls_edge_tls_termination_module.html">TLS Edge TLS Termination Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="endpoints.html">Endpoints</a></li>
<li class="toctree-l1"><a class="reference internal" href="event_destinations.html">Event Destinations</a></li>
<li class="toctree-l1"><a class="reference internal" href="event_subscriptions.html">Event Subscriptions</a></li>
<li class="toctree-l1"><a class="reference internal" href="event_sources.html">Event Sources</a></li>
<li class="toctree-l1"><a class="reference internal" href="ip_policies.html">IP Policies</a></li>
<li class="toctree-l1"><a class="reference internal" href="ip_policy_rules.html">IP Policy Rules</a></li>
<li class="toctree-l1"><a class="reference internal" href="ip_restrictions.html">IP Restrictions</a></li>
<li class="toctree-l1"><a class="reference internal" href="reserved_addrs.html">Reserved Addresses</a></li>
<li class="toctree-l1"><a class="reference internal" href="reserved_domains.html">Reserved Domains</a></li>
<li class="toctree-l1"><a class="reference internal" href="ssh_certificate_authorities.html">SSH Certificate Authorities</a></li>
<li class="toctree-l1"><a class="reference internal" href="ssh_credentials.html">SSH Credentials</a></li>
<li class="toctree-l1"><a class="reference internal" href="ssh_host_certificates.html">SSH Host Certificates</a></li>
<li class="toctree-l1"><a class="reference internal" href="ssh_user_certificates.html">SSH User Certificates</a></li>
<li class="toctree-l1"><a class="reference internal" href="tls_certificates.html">TLS Certificates</a></li>
<li class="toctree-l1"><a class="reference internal" href="tunnel_sessions.html">Tunnel Sessions</a></li>
<li class="toctree-l1"><a class="reference internal" href="tunnels.html">Tunnels</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<main class="main">
<div class="content">
<article role="main">
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
<div class="section" id="errors">
<span id="id1"></span><h1>Errors<a class="headerlink" href="#errors" title="Permalink to this headline"></a></h1>
<p>When any method invoked against the ngrok API returns an error, a Exception of
<a class="reference internal" href="#ngrok.Error" title="ngrok.Error"><code class="xref py py-class docutils literal notranslate"><span class="pre">ngrok.Error</span></code></a> will be raised.</p>
<p>The exception includes details that will allow you to robustly handle any error
returned by the API. The <code class="xref py py-attr docutils literal notranslate"><span class="pre">ngrok.Error.error_code</span></code> field allows you to
handle any error in the ngrok system. Consult our <a class="reference external" href="https://ngrok.com/docs/errors">API Errors Documentation</a> for the list of error codes the API may
return.</p>
<div class="section" id="handling-errors">
<h2>Handling Errors<a class="headerlink" href="#handling-errors" title="Permalink to this headline"></a></h2>
<p>If the API returns an unexpected 404, a <a class="reference internal" href="#ngrok.NotFoundError" title="ngrok.NotFoundError"><code class="xref py py-class docutils literal notranslate"><span class="pre">ngrok.NotFoundError</span></code></a> will be
raised. Ensure that you check for it first because it is a subclass of <a class="reference internal" href="#ngrok.Error" title="ngrok.Error"><code class="xref py py-class docutils literal notranslate"><span class="pre">ngrok.Error</span></code></a>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
<span class="n">client</span><span class="o">.</span><span class="n">ip_policies</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
<span class="k">except</span> <span class="n">ngrok</span><span class="o">.</span><span class="n">NotFoundError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">client</span><span class="o">.</span><span class="n">ip_policies</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="k">except</span> <span class="n">ngrok</span><span class="o">.</span><span class="n">Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="c1"># something else happened</span>
</pre></div>
</div>
<p>Other validation errors are best distinguished by their error code. Consult our
documentation for the <a class="reference external" href="https://ngrok.com/docs/errors">list of all ngrok error codes</a>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
<span class="n">client</span><span class="o">.</span><span class="n">edges</span><span class="o">.</span><span class="n">https</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">hostports</span><span class="o">=</span><span class="p">[</span><span class="s2">"url-without-port.ngrok.io"</span><span class="p">])</span>
<span class="k">except</span> <span class="n">ngrok</span><span class="o">.</span><span class="n">Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">error_code</span> <span class="o">==</span> <span class="s2">"ERR_NGROK_7104"</span><span class="p">:</span>
<span class="c1"># handle a specific condition</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span>
</pre></div>
</div>
<p>If the ngrok API fails with an undefined response or there is some kind of
network error, there are no guarantees about the type of exception thrown
at that point it is best to use a naked <code class="docutils literal notranslate"><span class="pre">except</span></code> block or to catch a <code class="docutils literal notranslate"><span class="pre">RuntimeError</span></code>.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
<span class="n">client</span><span class="o">.</span><span class="n">ip_policies</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
<span class="c1"># an unexpected network error that you could retry</span>
</pre></div>
</div>
</div>
<div class="section" id="module-ngrok">
<span id="exception-classes"></span><h2>Exception Classes<a class="headerlink" href="#module-ngrok" title="Permalink to this headline"></a></h2>
<dl class="py exception">
<dt id="ngrok.Error">
<em class="property"><span class="pre">exception</span> </em><code class="sig-prename descclassname"><span class="pre">ngrok.</span></code><code class="sig-name descname"><span class="pre">Error</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">error_code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">http_status_code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">details</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ngrok/error.html#Error"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ngrok.Error" title="Permalink to this definition"></a></dt>
<dd><p>Raised by failed ngrok API operations.</p>
<p>This class encapsulates details about the error to make it simple for callers
to introspect the error and take action on it.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>error_code</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Optional</span></code>[<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>]) The unique ngrok error code indicating why the operation failed.</p></li>
<li><p><strong>message</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) Human-readable string explaining the error.</p></li>
<li><p><strong>http_status_code</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code>) HTTP status code returned by the server.</p></li>
<li><p><strong>details</strong> (<code class="xref py py-data docutils literal notranslate"><span class="pre">Any</span></code>) Arbitrary additional details about the error.</p></li>
</ul>
</dd>
</dl>
<dl class="py method">
<dt id="ngrok.Error.operation_id">
<em class="property"><span class="pre">property</span> </em><code class="sig-name descname"><span class="pre">operation_id</span></code><a class="headerlink" href="#ngrok.Error.operation_id" title="Permalink to this definition"></a></dt>
<dd><p>OperationID returns the unique trace ID assigned by ngrok to this API
request.</p>
</dd></dl>
</dd></dl>
<dl class="py exception">
<dt id="ngrok.NotFoundError">
<em class="property"><span class="pre">exception</span> </em><code class="sig-prename descclassname"><span class="pre">ngrok.</span></code><code class="sig-name descname"><span class="pre">NotFoundError</span></code><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">error_code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">http_status_code</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">details</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/ngrok/error.html#NotFoundError"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#ngrok.NotFoundError" title="Permalink to this definition"></a></dt>
<dd><p>Raised if the http_status_code of an API operation is 404.
This is a separate class to make this common condition easier to handle.</p>
</dd></dl>
</div>
</div>
</article>
<footer>
<div class="related-pages">
<a class="next-page" href="abuse_reports.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title">Abuse Reports</div>
</div>
<svg><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="datatypes.html">
<svg><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title">Datatypes</div>
</div>
</a>
</div>
<div class="related-information">
Copyright &#169; 1980, ngrok Inc.
|
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a>
and
<a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo theme</a>.
|
<a class="muted-link" href="_sources/errors.rst.txt"
rel="nofollow">
Show Source
</a>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
Contents
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Errors</a><ul>
<li><a class="reference internal" href="#handling-errors">Handling Errors</a></li>
<li><a class="reference internal" href="#module-ngrok">Exception Classes</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</main>
</div>
<script id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/scripts/main.js?digest=e931d09b2a40c1bb82b542effe772014573baf67"></script></body>
</html>