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!
Das liegt daran, dass HTTPie standardmäßig STDIN
liest, wenn es umgeleitet wird (was es hier in der Schleife ist).
Es gibt mehrere Möglichkeiten, es loszuwerden:
--ignore-stdin
zu verwenden (das existiert, um genau dieses Problem zu lösen):cat links.txt | while read url; do
http --ignore-stdin --verbose $url
done
STDIN
zurück in Terminal:cat links.txt | while read url; do
http --verbose $url < /dev/tty
done
STDIN
gar nicht erst um (achte aber auf Leerzeichen):for url in `cat links.txt`; do
http --verbose $url
done
Siehe auch Nr. 150.
Das --ignore-stdin ist das, wonach ich gesucht habe. Ich musste die installierten aktualisieren
Version, scheint aber jetzt wie erwartet zu funktionieren.
Ich liebe httpie, aber dieses kleine Ding hat mich irgendwann dazu gebracht zu verstehen ...
Danke für die sehr schnelle Antwort.
Beifall!
Am Samstag, den 23. November 2013 um 16:17 Uhr schrieb Jakub Roztočil [email protected] :
Geschlossen #181 https://github.com/jkbr/httpie/issues/181.
—
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHubhttps://github.com/jkbr/httpie/issues/181 an
.
Filipe Gomes Esperandio
Gtalk: [email protected]
Skype: Filipesperandio
Google Voice: +1 650 701 7057
Hallo, ich hatte ein ähnliches Problem, das über --ignore-stdin
gelöst wurde, aber mein Kontext ist etwas anders:
./run.sh http https://base-url/endpoint\?attributes=all\&nested_attribbutes\=all Authorization:Bearer\ bf54b184d7729ac9bfffb576782e2a1d3cd7bd76 Content-Type:application/json Accept:\ \*/\* -h
Ich bekam HTTP/1.1 422 Unprocessable Entity
Das Skript run.sh
sieht folgendermaßen aus: seq 5 | xargs -I {} -n1 "$@"
Das Hinzufügen --ignore-stdin
behebt das Problem, aber ich lese die Anfrage von STDIN
nicht. Können Sie mir bitte erklären, wie es in diesem Zusammenhang funktioniert?
Hilfreichster Kommentar
Das liegt daran, dass HTTPie standardmäßig
STDIN
liest, wenn es umgeleitet wird (was es hier in der Schleife ist).Es gibt mehrere Möglichkeiten, es loszuwerden:
--ignore-stdin
zu verwenden (das existiert, um genau dieses Problem zu lösen):STDIN
zurück in Terminal:STDIN
gar nicht erst um (achte aber auf Leerzeichen):Siehe auch Nr. 150.