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
Name | Type | Default | Description |
---|---|---|---|
url | string | Target URL (required), http(s):// prefix is optional | |
output | string | raw | Output format (raw, base64, html) |
format | string | jpg | Image format (jpg, png) |
ua | string | User-Agent string | |
quality | int | 85 | Image quality |
delay | int | 0 | Delay screenshot after page is loaded (milliseconds) |
width | int | 1600 | Viewport width |
height | int | 1200 | Viewport height |
zoom | float | 1.0 | Zoom factor |
full | bool | false | Capture full page height |
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)
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
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
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.
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/.
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
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
url2img is free/libre software released under the terms of the GNU GPL license, see the 'COPYING' file for details.