Tengo un comando curl a continuación que funciona bien y obtengo la respuesta. Estoy publicando datos json en un punto final que me devuelve la respuesta después de presionarlo.
curl -v 'url' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: url' --data-binary '{"query":"\n{\n data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n title\n type\n pottery {\n text\n pid\n href\n count\n resource\n }\n }\n}"}' --compressed
Ahora estoy intentando leer los datos binarios de temp.txt
un archivo externo pero de alguna manera no funciona y aparece un error.
curl -v 'url' -H 'Accept-Encoding: gzip, deflate, br' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Connection: keep-alive' -H 'DNT: 1' -H 'Origin: url' --data-binary "@/Users/david/Downloads/temp.txt" --compressed
A continuación se muestra el contenido que tengo en mi temp.txt
archivo:
Archivo original "temp.txt"
{
data(clientId: 1234, filters: [{key: "o", value: 100}], key: "world") {
title
type
pottery {
text
pid
href
count
resource
}
}
}
Este es el error que recibo:
.......
* upload completely sent off: 211 out of 211 bytes
< HTTP/1.1 500 Internal Server Error
< date: Fri, 28 May 2021 23:38:12 GMT
< server: envoy
< content-length: 0
< x-envoy-upstream-service-time: 1
<
* Connection #0 to host url left intact
* Closing connection 0
¿Hay algo malo que estoy haciendo?
Además, si copio exactamente el mismo contenido en el temp.txt
archivo que tengo en mi comando curl original, \n
entonces funciona bien.
Archivo "temp.txt" actualizado
Es decir, si mantengo el contenido como este en temp.txt
el archivo, entonces funciona bien desde mi segundo rizo:
{"query":"\n{\n data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n title\n type\n pottery {\n text\n pid\n href\n count\n resource\n }\n }\n}"}
Significa que necesito encontrar una manera de convertir nuevas líneas \n
manualmente desde temp.txt
un archivo antes de enviar la solicitud curl o ¿hay alguna otra manera?
Respuesta1
Su carga útil de datos es un documento JSON que contiene una query
clave. El valor de esa clave es un documento codificado en JSON, que posiblemente describe algún tipo de consulta, que no es en sí mismo un documento JSON. Las nuevas líneas están codificadas como \n
valores JSON, y el analizador JSON que utiliza el servidor las traducirá en nuevas líneas literales cuando reciba su solicitud.
Su intento de poner el query
valor decodificado en un archivo separado y pasarlo en su curl
llamada falla, porque la API con la que está hablandoesperalos datos deben ser un documento JSON con un valor codificado en JSON para la query
clave.
Lo correcto para descargar la consulta en un archivo separado es hacer exactamente lo que hizo en el último ejemplo. Coloque el documento JSON con la consulta codificada en un archivo y haga referencia a él --data-binary @filename
en la curl
línea de comando.
curl \
--header 'Content-Type: application/json' \
--data-binary '@/Users/david/Downloads/temp.txt' "$API_ENDPOINT"