Home

Awesome

url2img

url2img is HTTP server with API for capturing screenshots of websites.

Example (command line):

$ curl -s http://localhost:55888/?url=google.com > google.jpg

Example (web browser):

http://localhost:55888/?url=google.com&output=html

API

NameTypeDefaultDescription
urlstringTarget URL (required), http(s):// prefix is optional
outputstringrawOutput format (raw, base64, html)
formatstringjpgImage format (jpg, png)
uastringUser-Agent string
qualityint85Image quality
delayint0Delay screenshot after page is loaded (milliseconds)
widthint1600Viewport width
heightint1200Viewport height
zoomfloat1.0Zoom factor
fullboolfalseCapture full page height

Usage

Usage of url2img:

  -bind-addr string
        Bind address (default ":55888")
  -cache-dir string
        Path to cache directory, if empty caching is disabled
  -htpasswd-file string
        Path to htpasswd file, if empty auth is disabled
  -log-file string
        Path to log file, if empty logs to stdout
  -max-age int
        Cache maximum age (seconds) (default 86400)
  -read-timeout int
        Read timeout (seconds) (default 5)
  -write-timeout int
        Write timeout (seconds) (default 15)

Auth

If server is started with -htpasswd-file it will be protected with HTTP Basic Auth. Supports MD5, SHA1 and BCrypt (https://github.com/abbot/go-http-auth).

Examples:

$ htpasswd -c .htpasswd username
$ url2img -htpasswd-file .htpasswd

$ curl -I 'http://localhost:55888/?url=google.com'

HTTP/1.1 401 Unauthorized
Content-Type: text/plain; charset=utf-8
Www-Authenticate: Basic realm="url2img/1.0"
X-Content-Type-Options: nosniff
Date: Wed, 09 Nov 2016 17:50:33 GMT
Content-Length: 17

$ curl -u username:password -s http://localhost:55888/?url=google.com > google.jpg
$ curl -s http://username:password@localhost:55888/?url=google.com > google.jpg
$ curl --netrc-file my-password-file http://localhost:55888/?url=google.com > google.jpg

Cache

If server is started with -cache-dir it will cache HTTP responses to disk according to RFC7234 (https://github.com/lox/httpcache). You can use -max-age to control maximum age of cache file, default is 86400 seconds (1 day).

Example:

$ curl -I 'http://localhost:55888/?url=https://reddit.com'

HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 21
Cache-Control: public,max-age=86400
Content-Length: 21107
Content-Type: image/jpeg
Last-Modified: Wed, 09 Nov 2016 18:25:26 GMT
Proxy-Date: Wed, 09 Nov 2016 17:25:26 GMT
Server: url2img/1.0
Via: 1.1 httpcache
X-Cache: HIT
Date: Wed, 09 Nov 2016 17:25:47 GMT

If you want uncached response you can request it via Cache-Control header:

$ curl -H 'Cache-Control: no-cache' 'http://localhost:55888/?url=https://reddit.com'

Or you can send POST request with json body, POST requests are never cached:

$ curl -X POST -d '{"url": "https://reddit.com", "format": "png"}' http://localhost:55888

Reload

To reload server (e.g. when .htpasswd is changed or log file is rotated) send SIGHUP signal to process. If you use one of the provided init scripts just do a reload.

Download

Binary is compiled fully static with musl toolchain. It should work on all systems without any additional dependencies. Systemd and OpenRC init scripts are included in dist/.

Alternative: run in Docker container

An alternative is to run everything in a container. Change to the dist/docker directory and:

# Build container: `docker build -t url2img .`
# Then run container: `docker run -p 55888:55888 url2img`

Output should be like this:

$ docker run -p 55888:55888 url2img
running server on port 55888

Compile

Install Qt bindings (https://github.com/therecipe/qt) with WebKit (see https://github.com/therecipe/qt/wiki/Installing-QtWebKit-Module).

Install url2img to $GOPATH/bin:

$ go get -d github.com/gen2brain/url2img
$ go generate github.com/gen2brain/url2img/url2img
$ qtminimal linux $GOPATH/src/github.com/gen2brain/url2img/url2img
$ go install -tags minimal github.com/gen2brain/url2img/cmd/url2img

License

url2img is free/libre software released under the terms of the GNU GPL license, see the 'COPYING' file for details.