Estoy tratando de usar el comando resp, err := http.Get(url) para escribir la respuesta en el archivo y usar la misma respuesta para extraer enlaces.

Después de escribir el contenido en un archivo usando resp.Write(f), no puedo usar resp.Body para otro propósito (para la respuesta de la URL anterior) sin hacer otra solicitud http.Get.

Probé resp2 := bytes.NewBuffer(resp). Da error ya que el tipo no coincide. También intenté copiar.

3
L.fole 26 ene. 2016 a las 16:36

2 respuestas

La mejor respuesta

Suponiendo que la respuesta cabe en la memoria, simplemente cree un búfer y use resp.Write, como (no probado, básicamente correcto):

var b bytes.Buffer
if err := resp.Write(b); err != nil {
   // handle error
} else {
    // Do something with buffer
}

Para el código que funciona con cualquier lector, use: ioutil.ReadAll, que devuelve un nuevo [] byte que contiene los datos que luego puede envolver en bytes.

5
David Budworth 26 ene. 2016 a las 14:06

Httputil tiene un volcado de respuesta. https://golang.org/pkg/net/http/httputil/#DumpRequest Reemplazará el cuerpo con una copia en memoria para que pueda reutilizarlo.

2
slcjordan 26 ene. 2016 a las 21:49