func (h *HTTP) Produce() (stdOut, stdErr io.Reader, err error) {
	client := http.Client{
		Timeout: time.Second * requestTimeoutSeconds,
	}
	h.Res, err = client.Do(h.Req)
	if err != nil {
		return nil, nil, err
	}
	if h.Res.StatusCode == http.StatusOK {
		return h.Res.Body, nil, nil
	}
	buf := new(bytes.Buffer)
	_, err = buf.ReadFrom(h.Res.Body)
	if err != nil {
		logrus.Errorf("could not read from HTTP response body")
		return nil, nil, fmt.Errorf(
			"problems encountered: unexpected response code %d",
			h.Res.StatusCode,
		)
	}
	return nil, nil, fmt.Errorf(
		"problems encountered: unexpected response code %d; body: %s",
		h.Res.StatusCode,
		buf.String(),
	)
}
Produce runs the external process and returns two io.Readers (to stdout and
stderr). In this case we equate the http.Respose "Body" with stdout.
package stream
import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"time"
	"github.com/sirupsen/logrus"
)
type HTTP struct {
	Req *http.Request
	Res *http.Response
}
const (
	requestTimeoutSeconds = 3
)