Skip to content

Instantly share code, notes, and snippets.

@oxtoacart
Created May 9, 2019 18:09
Show Gist options
  • Save oxtoacart/613e105b6e1ca62438a821396215b7c3 to your computer and use it in GitHub Desktop.
Save oxtoacart/613e105b6e1ca62438a821396215b7c3 to your computer and use it in GitHub Desktop.
HTTP server that returns unlimited data
package main
import (
"flag"
"net"
"net/http"
"strings"
"github.com/getlantern/golog"
)
var (
log = golog.LoggerFor("origin")
addr = flag.String("addr", ":5000", "where to listen, defaults to :5000")
data = []byte("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz")
)
func main() {
flag.Parse()
l, listenErr := net.Listen("tcp", *addr)
if listenErr != nil {
log.Fatalf("Unable to listen at %v: %v", *addr, listenErr)
}
log.Debugf("Listening for HTTP connections at %v", l.Addr())
serveErr := http.Serve(l, http.HandlerFunc(handle))
if serveErr != nil {
log.Fatalf("Error while serving: %v", serveErr)
}
}
func handle(resp http.ResponseWriter, req *http.Request) {
log.Debug("Got request")
resp.Header().Set("Content-Length", "999999999999")
resp.WriteHeader(http.StatusOK)
log.Debug("Wrote response header")
conn, br, err := resp.(http.Hijacker).Hijack()
if err != nil {
log.Errorf("Error hijacking: %v", err)
}
nodelay := strings.Contains(req.URL.Path, "nodelay")
conn.(*net.TCPConn).SetNoDelay(nodelay)
log.Debugf("Set nodelay to %v", nodelay)
br.Flush()
log.Debug("Streaming response data")
for {
_, err := br.Write(data)
br.Flush()
if err != nil {
log.Errorf("Error writing response data: %v", err)
return
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment