Entonces, para enviar una solicitud POST a gists (github), puedes hacer algo como esto como se ve en https: //gist.github.com/caspyi ...
curl --user "user" -X POST --data '{"description":"Created via API","public":"true","files":{"file1.txt":{"content":"Demo"}}' https://api.github.com/gists
Pero, en el ejemplo anterior, el nombre del archivo y el contenido del mismo están codificados de manera rígida, que es la parte. file1.txt":{"content":"Demo"}
..
Estoy reemplazando la parte anterior con mi variable $file":{"content":"$content"}
pero inicialice la variable, la solicitud json debe estar entre comillas dobles, lo que hice como
curl --user "user" -X POST --data "{\"description\":\"Created via API\",\"public\":\"true\",\"files\":{\"$file\":{\"content\":\"$content\"}}' https://api.github.com/gists
Pero esto no funciona, me sale un error json.
{
"message": "Problems parsing JSON",
"documentation_url": "https://developer.github.com/v3/gists/#create-a-gist"
}
Incluso, si reemplacé todas las comillas dobles escapadas con \'
comillas simples.
¿Alguien sabe cómo incluir una variable dentro de esta solicitud json? por cierto: he utilizado todos los encabezados como
-H "Content-Type: application/json; charset=UTF-8"
y muchas combinaciones para validar la solicitud pero en vano.
ACTUALIZAR.
Así es como se ve todo el contenido.
function gist_controller(){
content=$(cat $1)
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
read -p "enter your password - " pass
public="false"
gist_content=$(cat $1)
curl --user "samserayo" -H "Content-Type: application/json; charset=UTF-8" -X POST -d "{ 'description': 'Created via API', 'public': 'true', 'files':{ ' '$1 ':{ 'content': '$gist_content'}}" https://api.github.com/gists
}
Respuestas:
No muestra el valor que ha establecido para $ file o $ content. ¿A qué se expanden ambos? Es probable que uno, o el otro, o ambos, contengan caracteres que no le gustan al analizador JSON. Lo más probable es que algo dentro del valor de expansión variable deba escaparse o codificarse aún más antes de enviarlo al analizador JSON a través de la curvatura.
¿Has exportado las variables de entorno?
Tratar:
para asegurarte de que ambos estén ajustados como esperas que estén.
fuente
No especificó qué shell está utilizando, pero cualquier cosa entre comillas dobles está sujeta a la expansión del nombre de archivo del shell. En particular, {} tiene significado para la mayoría de las conchas. Esa es la razón por la que el ejemplo que citó utilizó comillas simples para envolver todo el asunto.
Los escapes de Shell son difíciles, ya veces parece imposible obtener lo que quieres. Honestamente, en casos como este escribiría un script de Python para llamar curl, donde sé que el shell no me está "ayudando".
fuente
Tienes que poner toda la cadena entre comillas dobles.
"
. Y necesitas escapar de las comillas dentro de la cadena (¡no convertirlas en otros tipos de comillas!).Así que en lugar de:
Usted quiere:
Probablemente deberías probar con
echo
y asegúrese de que la cadena es exactamente correcta.fuente
"message": "Problems parsing JSON",
{
tiene una coincidencia}
.)