Come aggiungere la stringa tra virgolette e barre in golang

0

Domanda

Io condividere un esempio

Voglio la linea sotto in golang stringa curl -u admin:admin -H 'Accept: application/yang-data+json' -s http://<ip>/restconf/data/ -v

codice che ho scritto:

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

err: imprevisti stringa alla fine della Riga.

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

Migliore risposta

1

imprevisti stringa alla fine della Riga.

È possibile utilizzare fmt.Sprintf per formattare una stringa in modo che non dovete cucire insieme da un lato. Trovo che questo sia più facile da leggere e scrivere, a me stesso:

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

Sembra come se si sta cercando di creare una shell di comando per richiamare Curl. Meglio che cercare di fuggire curl argomenti per la shell, è quello di richiamare curl direttamente. In questo modo è possibile utilizzare Andare a separare gli argomenti, senza doversi preoccupare di shell citando:

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

Tuttavia, se fossi in te, mi piacerebbe usare https://pkg.go.dev/net/http per effettuare la richiesta e di ovviare os/exec interamente. Le prestazioni e l'efficienza sarà migliore, e gestisce la risposta e le eventuali condizioni di errore sarà il modo più facile di fare che attraverso curl e il tentativo di analisi di uscita e di gestire i codici di errore.

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

Grazie per la risposta. Ma che cosa circa il flag -u -s e -v come includere che
Pulkit Kundra

{"errore":"parse \"-s http://<indirizzo ip>/restconf/dati/ -v\": il primo segmento del percorso nell'URL non può contenere due punti","gestore":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Getrunningconfig: Impossibile creare la richiesta di: analizzare \"-s http://<ip>/restconf/dati/ -v\": il primo segmento del percorso nell'URL non può contenere due punti","time":"2021-11-24T05:13:21Z"} {"gestore":"POST /collect","jobID":"Collect-11-24-2021_051320","level":"error","method":"initiateConfdCollection","msg":"Impossibile ottenere i dati dal Namespace: <ip>","time":"2021-11-24T05:13:21Z"}
Pulkit Kundra

Ottenuto l'errore di cui sopra durante l'utilizzo di pkg.andare.dev/net/http
Pulkit Kundra

Se si vuole andare con i net/http approccio e hai trovato un errore, meglio per incollare come una nuova domanda. A me sembra che hanno -sla url, e -v tutti nella stessa stringa lì.
Daniel Farrell

In altre lingue

Questa pagina è in altre lingue

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