Looks like a leackage.
I have this file, links.txt:
www.google.com?q=1
www.google.com?q=2
www.google.com?q=3
www.google.com?q=4
Running this:
$ cat links.txt | while read line; do http --print BHhb GET $line; done
Expected result:
4 http calls, one for each line on the file.
Actual:
1 request executed to the first url in the file and request body having the other 3 lines.
GET /?q=1 HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 63
Content-Type: application/json; charset=utf-8
Host: www.google.com
User-Agent: HTTPie/0.6.0
www.google.com?q=2
www.google.com?q=3
www.google.com?q=4
HTTP/1.0 400 Bad Request
Content-Length: 925
Content-Type: text/html; charset=UTF-8
Date: Sat, 23 Nov 2013 19:48:51 GMT
Server: GFE/2.0
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 400 (Bad Request)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}<strong i="5">@media</strong> screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}
</style>
<a href=//www.google.com/><img src=//www.google.com/images/errors/logo_sm.gif alt=Google></a>
<p><b>400.</b> <ins>That’s an error.</ins>
<p>Your client has issued a malformed or illegal request. <ins>That’s all we know.</ins>
Running same script with curl instead works as expected.
cheers!
Es porque HTTPie de forma predeterminada lee STDIN
, si se redirige (que está aquí dentro del bucle).
Hay varias formas de deshacerse de él:
--ignore-stdin
(que existe para resolver exactamente este problema):cat links.txt | while read url; do
http --ignore-stdin --verbose $url
done
STDIN
de regreso a la terminal:cat links.txt | while read url; do
http --verbose $url < /dev/tty
done
STDIN
en primer lugar (sin embargo, tenga cuidado con los espacios):for url in `cat links.txt`; do
http --verbose $url
done
Ver también #150.
El --ignore-stdin es lo que estaba buscando. Tuve que actualizar el instalado
versión, pero parece estar funcionando como se esperaba ahora.
Me encanta httpie, pero esta cosita me hizo pensar en algún momento...
Gracias por la respuesta muy rápida.
¡Salud!
El sábado 23 de noviembre de 2013 a las 16:17, Jakub Roztočil [email protected] escribió:
Cerrado #181 https://github.com/jkbr/httpie/issues/181.
—
Responda a este correo electrónico directamente o véalo en Gi tHubhttps://github.com/jkbr/httpie/issues/181
.
Filipe Gomes Esperandio
Gtalk: [email protected]
Skype: Filipperando
Voz de Google: +1 650 701 7057
Hola, tuve un problema similar que se resolvió a través --ignore-stdin
pero mi contexto es un poco diferente:
./run.sh http https://base-url/endpoint\?attributes=all\&nested_attribbutes\=all Authorization:Bearer\ bf54b184d7729ac9bfffb576782e2a1d3cd7bd76 Content-Type:application/json Accept:\ \*/\* -h
Estaba recibiendo HTTP/1.1 422 Unprocessable Entity
El script run.sh
tiene el siguiente aspecto: seq 5 | xargs -I {} -n1 "$@"
Agregar --ignore-stdin
soluciona el problema, pero no estoy leyendo la solicitud de STDIN
. ¿Podría explicarme cómo funciona en este contexto?
Comentario más útil
Es porque HTTPie de forma predeterminada lee
STDIN
, si se redirige (que está aquí dentro del bucle).Hay varias formas de deshacerse de él:
--ignore-stdin
(que existe para resolver exactamente este problema):STDIN
de regreso a la terminal:STDIN
en primer lugar (sin embargo, tenga cuidado con los espacios):Ver también #150.