Cómo añadir string con comillas y barras en golang

0

Pregunta

Voy a compartir un ejemplo

Quiero la línea de abajo en la cadena golang curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

código escribí:

cmd := "curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://" + ip_string + "/restconf/data/ -v"

err: inesperado cadena al final de la Línea.

go
2021-11-23 16:07:26
1

Mejor respuesta

1

inesperado cadena al final de la Línea.

Puede utilizar fmt.Sprintf para dar formato a una cadena de modo que usted no tiene que puntada es, junto con la mano. Esto me parece más fácil de leer y escribir, a mí mismo:

fmt.Sprintf("curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://%s/restconf/data/ -v", ip_string)

Parece que usted está tratando de crear un shell de comandos para invocar Curl. Mejor que tratando de escapar de su curl argumentos para el shell, es invocar curl directamente. De esta manera usted puede utilizar Go para separar los argumentos sin tener que preocuparse de shell de citar:

cmd := exec.Command("curl", 
   "-u", "admin:admin",
   "-H", "Accept: application/yang-data+json",  
   "-s", 
   fmt.Sprintf("http://%s/restconf/data/", ip_string), 
   "-v",
)

Sin embargo, si yo fuera usted, me gustaría usar https://pkg.go.dev/net/http para realizar la solicitud y obviar os/exec totalmente. El rendimiento y la eficiencia será mejor, y el manejo de la respuesta y las condiciones de error será la manera más fácil de hacer que a través de curl y tratando de analizar de salida y manejar los códigos de error.

req, err := http.NewRequest("GET", fmt.Sprintf("http://%s", source_ip), nil)
// handle err
req.Header.Add("Accept", "application/yang-data+json")
req.SetBasicAuth("admin","admin")
resp, err := client.Do(req)
// handle err!
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
// handle err!
2021-11-23 16:26:50

Gracias por la respuesta. Pero, ¿qué acerca de los indicadores -u -s y -v cómo incluir a los que
Pulkit Kundra

{"error":"analizar \"-s http://<ip>/restconf de datos// - v\": el primer segmento de la ruta en la dirección URL no puede contener colon","controlador":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: no se pudo crear la solicitud: analizar \"-s http://<ip>/restconf de datos// - v\": el primer segmento de la ruta en la dirección URL no puede contener colon","time":"2021-11-24T05:13:21Z"} {"controlador":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"no se pudo obtener datos desde el espacio de Nombres: <ip>","el tiempo":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Tengo el error anterior, mientras que el uso de pkg.vaya.dev/net/http
Pulkit Kundra

Si quieres ir con el net/http enfoque y usted está recibiendo un error, mejor para pegar como una nueva pregunta. A mi me parece que tiene -sla dirección url, y -v todos en la misma cadena de allí.
Daniel Farrell

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................