// Post2Receiver takes commands and http posts them to // the command receiver func Post2Receiver(r *http.Request, commands []FetchCommand) (*bytes.Buffer, error) { b := new(bytes.Buffer) if commands == nil || len(commands) == 0 { return b, fmt.Errorf("Slice of commands nil or empty %v", commands) } ii := instance_mgt.Get(r) fullURL := fmt.Sprintf("https://%s%s", ii.PureHostname, uriFetchCommandReceiver) wpf(b, "sending to URL: %v\n", fullURL) bcommands, err := json.MarshalIndent(commands, "", "\t") if err != nil { wpf(b, "marshalling to []byte failed\n") return b, err } req, err := http.NewRequest("POST", fullURL, bytes.NewBuffer(bcommands)) if err != nil { wpf(b, "creation of POST request failed\n") return b, err } req.Header.Set("X-Custom-Header-Counter", "nocounter") req.Header.Set("Content-Type", "application/json") bts, reqUrl, err := fetch.UrlGetter(r, fetch.Options{Req: req}) _, _ = bts, reqUrl if err != nil { wpf(b, "Sending the POST request failed\n") return b, err } wpf(b, "effective req url: %v\n", reqUrl) wpf(b, "response body:\n") wpf(b, "%s\n", html.EscapeString(string(bts))) return b, nil }
func writeMethods(w http.ResponseWriter, r *http.Request, m map[string]interface{}) { c := appengine.NewContext(r) client := urlfetch.Client(c) ii := instance_mgt.Get(r) resp2, err := client.Get(spf(`http://%s/write-methods-read`, ii.PureHostname)) loghttp.E(w, r, err, false) bufDemo := new(bytes.Buffer) bufDemo.WriteString("end of page") defer func() { //w.Header().Set("Content-Type", "text/plain; charset=utf-8") w.Write(bufDemo.Bytes()) resp2.Body.Close() }() w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprint(w, "<pre>") // // fmt.Fprint(w, `Most basic: this is written via Fprintln into response writer`+"\n\n\n") // // byte slice into response writer const sz = 20 var sB []byte sB = make([]byte, sz) sB[0] = 112 sB[1] = 111 sB[2] = '-' sB[3] = 112 sB[4] = 101 sB[5] = 108 sB[6] = 32 for i := 7; i < sz; i++ { sB[i] = ' ' } sB[sz-1] = '!' w.Write([]byte("Byte slice into response writer: \n\t\t")) w.Write(sB) w.Write([]byte("\n\n\n")) // // // resp2.Body into byte slice, sB2 := make([]byte, sz) for i := 0; i < sz; i++ { sB2[i] = '-' } bytesRead, err := resp2.Body.Read(sB2) if err == nil { fmt.Fprintf(w, "Byte slice - reading %v bytes from response-body\n\t\t%q \n\n\n", bytesRead, string(sB2)) } else { fmt.Fprintf(w, "err reading into byte slice --%v-- \n\n\n", err) } // // // wpf(w, "operations with a bytes buffer\n") var buf1 *bytes.Buffer buf1 = new(bytes.Buffer) // not optional on buffer pointer buf1.ReadFrom(resp2.Body) buf1 = new(bytes.Buffer) wpf(buf1, "\t\tbuf1 content %v (filled via Fprintf)\n", 222) wpf(w, "FOUR methods of dumping buf1 into resp.w:\n") wpf(w, "\tw.Write\n") w.Write(buf1.Bytes()) wpf(w, "\tFprint\n") wpf(w, buf1.String()) wpf(w, "\tio.WriteString\n") io.WriteString(w, buf1.String()) wpf(w, "\tio.Copy \n") io.Copy(w, buf1) // copy the bytes.Buffer into w wpf(w, " \t\t\tio.copy exhausts buf1 - Fprinting again yields %q ", buf1.String()) wpf(w, buf1.String()) wpf(w, "\n\n\n") // // // wpf(w, "ioutil.ReadAll\n") var content []byte resp3, err := client.Get(spf(`http://%s/write-methods-read`, ii.Hostname)) loghttp.E(w, r, err, false) content, _ = ioutil.ReadAll(resp3.Body) scont := string(content) scont = stringspb.Ellipsoider(scont, 20) w.Write([]byte(scont)) fmt.Fprint(w, "</pre>") }
func collectInfo(w http.ResponseWriter, r *http.Request, m map[string]interface{}) { instance_mgt.Get(r) }