

ウェブアプリのテストを行いたいのですが、"\xff"などの文字をパラメータとしてpostする方法がわかりません。

このような方法はないのでしょうか?


CC BY-SA 3.0
2017-09-09T15:10:38.953
37833
2017-09-11T02:01:33.873
9149
question
curl
不正なバイト文字をcurlなどでpostする方法


不正バイト入りのパラメータ文字列が保存されたファイルをデータとして指定するのはどうでしょうか？

[code]

    $ echo -e 'str=\xff' > invalid_bytes.txt
    $ hexdump -C invalid_bytes.txt 
    00000000  73 74 72 3d ff 0a                                 |str=..|
    00000006
    $ curl -d @invalid_bytes.txt http://httpbin.org/post
    {
      "args": {}, 
      "data": "", 
      "files": {}, 
      "form": {
        "str": "\ufffd"
      }, 
      "headers": {
        "Accept": "*/*", 
        "Connection": "close", 
        "Content-Length": "6", 
        "Content-Type": "application/x-www-form-urlencoded", 
        "Host": "httpbin.org", 
        "User-Agent": "curl/7.52.1"
      }, 
      "json": null, 
      "origin": "xxx.xxx.xxx.xxx", 
      "url": "http://httpbin.org/post"
    }
    
[/code]

多少面倒ですが、`echo` の結果をパイプでつなぐこともできます。

[code]

    $ echo -e 'str=\xff' | curl -d @- http://httpbin.org/post
    
[/code]

ほぼ同じですがコマンド置換を使ってもできます。

[code]

    $ curl -d "$(echo -e 'str=\xff')" http://httpbin.org/post
    
[/code]

ファイルに保存する代わりにシェルの変数に保存することもできます。

[code]

    $ DATA=$(echo -e '\xff') curl -d "str=${DATA}" http://httpbin.org/post
    
[/code]

※ ヌル文字 (\x00) を送信しようとすると、方法によっては文字列終端として扱われてしまって上手く送信できないのでご注意ください。(文字列を
`abc\x00abc` などとして実行すると違いが分かります。)

### 参考

  * [`man curl`](https://linux.die.net/man/1/curl) における `-d` / `--data` オプションの説明
  * リクエスト先のURLについて: [HTTP Test server that accepts GET/Post calls](https://stackoverflow.com/q/5725430/5989200) \-- Stack Overflow
  * [Passing binary data to curl without using a @file](https://unix.stackexchange.com/q/77588/211480) \-- Unix & Linux


CC BY-SA 3.0
2017-09-09T19:57:16.647
37840
2017-09-11T02:01:33.873
2017-09-11T02:01:33.873
19110
19110
37833
answer