Httpie: http tidak berfungsi dalam loop bash

Dibuat pada 23 Nov 2013  ·  3Komentar  ·  Sumber: httpie/httpie

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!

Komentar yang paling membantu

Itu karena HTTPie secara default membaca STDIN , jika dialihkan (yang ada di sini di dalam loop).

Ada beberapa cara untuk menghilangkannya:

  • Cara terbaik adalah menggunakan --ignore-stdin (yang ada untuk menyelesaikan masalah ini dengan tepat):
cat links.txt | while read url; do 
        http --ignore-stdin --verbose $url
done
  • Atau, ubah STDIN kembali ke terminal:
cat links.txt | while read url; do
        http --verbose $url < /dev/tty
done
  • Atau, jangan mengarahkan ulang STDIN terlebih dahulu (hati-hati dengan spasi):
for url in `cat links.txt`; do 
        http --verbose $url
done

Lihat juga #150.

Semua 3 komentar

Itu karena HTTPie secara default membaca STDIN , jika dialihkan (yang ada di sini di dalam loop).

Ada beberapa cara untuk menghilangkannya:

  • Cara terbaik adalah menggunakan --ignore-stdin (yang ada untuk menyelesaikan masalah ini dengan tepat):
cat links.txt | while read url; do 
        http --ignore-stdin --verbose $url
done
  • Atau, ubah STDIN kembali ke terminal:
cat links.txt | while read url; do
        http --verbose $url < /dev/tty
done
  • Atau, jangan mengarahkan ulang STDIN terlebih dahulu (hati-hati dengan spasi):
for url in `cat links.txt`; do 
        http --verbose $url
done

Lihat juga #150.

--ignore-stdin adalah yang saya cari. Saya harus memperbarui yang diinstal
versi, tetapi tampaknya berfungsi seperti yang diharapkan sekarang.
Saya suka httpie, tetapi hal kecil ini membuat saya berpikir...

Terima kasih atas respon yang sangat cepat.
Bersulang!

Pada Sabtu, 23 November 2013 pukul 16.17, Jakub Roztočil [email protected] menulis :

Ditutup #181 https://github.com/jkbr/httpie/issues/181.


Balas email ini secara langsung atau lihat di Gi tHubhttps://github.com/jkbr/httpie/issues/181
.

Filipe Gomes Esperandio

Gtalk: [email protected]
Skype: filipesperandio
Google Voice: +1 650 701 7057

Hai, saya memiliki masalah serupa yang diselesaikan melalui --ignore-stdin tetapi konteks saya sedikit berbeda:

./run.sh http https://base-url/endpoint\?attributes=all\&nested_attribbutes\=all Authorization:Bearer\ bf54b184d7729ac9bfffb576782e2a1d3cd7bd76 Content-Type:application/json Accept:\ \*/\* -h

Saya mendapatkan HTTP/1.1 422 Unprocessable Entity

Script run.sh terlihat sebagai berikut: seq 5 | xargs -I {} -n1 "$@"

Menambahkan --ignore-stdin memperbaiki masalah, tetapi saya tidak membaca permintaan dari STDIN . Bisakah Anda menjelaskan kepada saya cara kerjanya dalam konteks ini?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

eliangcs picture eliangcs  ·  5Komentar

victorhooi picture victorhooi  ·  4Komentar

rashthedude picture rashthedude  ·  3Komentar

Abdallah-Obaid picture Abdallah-Obaid  ·  4Komentar

sensibleish picture sensibleish  ·  3Komentar