Skip to content

Instantly share code, notes, and snippets.

@ajliv
Last active August 28, 2016 06:58
Show Gist options
  • Save ajliv/d3ce4efcb30056defb5c2c0d6fd7b254 to your computer and use it in GitHub Desktop.
Save ajliv/d3ce4efcb30056defb5c2c0d6fd7b254 to your computer and use it in GitHub Desktop.
BrowserSync proxy server
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>BrowserSync Proxy Server</title>
</head>
<body>
<h1>BrowserSync Proxy Server</h1>
<ul>
<li><a href="/api/" data-bare-link="true"><code>/api/</code></a> This page.</li>
<li><a href="/api/ip" data-bare-link="true"><code>/api/ip</code></a> Returns Origin IP.</li>
<li><a href="/api/user-agent" data-bare-link="true"><code>/api/user-agent</code></a> Returns user-agent.</li>
<li><a href="/api/headers" data-bare-link="true"><code>/api/headers</code></a> Returns header dict.</li>
<li><a href="/api/get" data-bare-link="true"><code>/api/get</code></a> Returns GET data.</li>
<li><code>/api/post</code> Returns POST data.</li>
<li><code>/api/patch</code> Returns PATCH data.</li>
<li><code>/api/put</code> Returns PUT data.</li>
<li><code>/api/delete</code> Returns DELETE data</li>
<li><a href="/api/encoding/utf8"><code>/api/encoding/utf8</code></a> Returns page containing UTF-8 data.</li>
<li><a href="/api/gzip" data-bare-link="true"><code>/api/gzip</code></a> Returns gzip-encoded data.</li>
<li><a href="/api/deflate" data-bare-link="true"><code>/api/deflate</code></a> Returns deflate-encoded data.</li>
<li><a href="/api/status/418"><code>/api/status/:code</code></a> Returns given HTTP Status code.</li>
<li><a href="/api/response-headers?Content-Type=text%2Fplain%3B+charset%3DUTF-8&amp;Server=httpbin"><code>/api/response-headers?key=val</code></a> Returns given response headers.</li>
<li><a href="/api/redirect/6"><code>/api/redirect/:n</code></a> 302 Redirects <em>n</em> times.</li>
<li><a href="/api/redirect-to?url=http%3A%2F%2Fexample.com%2F"><code>/api/redirect-to?url=foo</code></a> 302 Redirects to the <em>foo</em> URL.</li>
<li><a href="/api/relative-redirect/6"><code>/api/relative-redirect/:n</code></a> 302 Relative redirects <em>n</em> times.</li>
<li><a href="/api/absolute-redirect/6"><code>/api/absolute-redirect/:n</code></a> 302 Absolute redirects <em>n</em> times.</li>
<li><a href="/api/cookies" data-bare-link="true"><code>/api/cookies</code></a> Returns cookie data.</li>
<li><a href="/api/cookies/set?k2=v2&amp;k1=v1"><code>/api/cookies/set?name=value</code></a> Sets one or more simple cookies.</li>
<li><a href="/api/cookies/delete?k2=&amp;k1="><code>/api/cookies/delete?name</code></a> Deletes one or more simple cookies.</li>
<li><a href="/api/basic-auth/user/passwd"><code>/api/basic-auth/:user/:passwd</code></a> Challenges HTTPBasic Auth.</li>
<li><a href="/api/hidden-basic-auth/user/passwd"><code>/api/hidden-basic-auth/:user/:passwd</code></a> 404'd BasicAuth.</li>
<li><a href="/api/digest-auth/auth/user/passwd"><code>/api/digest-auth/:qop/:user/:passwd</code></a> Challenges HTTP Digest Auth.</li>
<li><a href="/api/stream/20"><code>/api/stream/:n</code></a> Streams <em>min(n, 100)</em> lines.</li>
<li><a href="/api/delay/3"><code>/api/delay/:n</code></a> Delays responding for <em>min(n, 10)</em> seconds.</li>
<li><a href="/api/drip?duration=5&amp;numbytes=5&amp;code=200"><code>/api/drip?numbytes=n&amp;duration=s&amp;delay=s&amp;code=code</code></a> Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code.</li>
<li><a href="/api/range/1024"><code>/api/range/1024?duration=s&amp;chunk_size=code</code></a> Streams <em>n</em> bytes, and allows specifying a <em>Range</em> header to select a subset of the data. Accepts a <em>chunk_size</em> and request <em>duration</em> parameter.</li>
<li><a href="/api/html" data-bare-link="true"><code>/api/html</code></a> Renders an HTML Page.</li>
<li><a href="/api/robots.txt" data-bare-link="true"><code>/api/robots.txt</code></a> Returns some robots.txt rules.</li>
<li><a href="/api/deny" data-bare-link="true"><code>/api/deny</code></a> Denied by robots.txt file.</li>
<li><a href="/api/cache" data-bare-link="true"><code>/api/cache</code></a> Returns 200 unless an If-Modified-Since or If-None-Match header is provided, when it returns a 304.</li>
<li><a href="/api/cache/60"><code>/api/cache/:n</code></a> Sets a Cache-Control header for <em>n</em> seconds.</li>
<li><a href="/api/bytes/1024"><code>/api/bytes/:n</code></a> Generates <em>n</em> random bytes of binary data, accepts optional <em>seed</em> integer parameter.</li>
<li><a href="/api/stream-bytes/1024"><code>/api/stream-bytes/:n</code></a> Streams <em>n</em> random bytes of binary data, accepts optional <em>seed</em> and <em>chunk_size</em> integer parameters.</li>
<li><a href="/api/links/10"><code>/api/links/:n</code></a> Returns page containing <em>n</em> HTML links.</li>
<li><a href="/api/image"><code>/api/image</code></a> Returns page containing an image based on sent Accept header.</li>
<li><a href="/api/image/png"><code>/api/image/png</code></a> Returns page containing a PNG image.</li>
<li><a href="/api/image/jpeg"><code>/api/image/jpeg</code></a> Returns page containing a JPEG image.</li>
<li><a href="/api/image/webp"><code>/api/image/webp</code></a> Returns page containing a WEBP image.</li>
<li><a href="/api/image/svg"><code>/api/image/svg</code></a> Returns page containing a SVG image.</li>
<li><a href="/api/forms/post" data-bare-link="true"><code>/api/forms/post</code></a> HTML form that submits to <em>/post</em></li>
<li><a href="/api/xml" data-bare-link="true"><code>/api/xml</code></a> Returns some XML</li>
</ul>
</body>
</html>
const browserSync = require('browser-sync');
const modRewrite = require('connect-modrewrite');
const PROXIES = [
'^/api http://httpbin.org [PL]',
'^/api/(.*) http://httpbin.org/$1 [PL]'
];
browserSync({
server: {
baseDir: 'public',
middleware: [
modRewrite(PROXIES)
]
},
files: [
'public/**/*'
]
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment