HTTP::Request#content($bytes) もしくは HTTP::Request#add_content($bytes) を呼んでもcontent-lengthは自動で計算されず、0になる。
なのでそのままリクエストを送ると、ちゃんとcontent-lengthだけbodyを読む実装はボディが空だとみなすのでちゃんとcontent-lengthを計算しなければいけない。
Plackの実装に慣れていたのでびっくりした。
my $req = HTTP::Request::Common::POST($url); my $json = JSON::XS::encode_json($payload); $req->content($json); $req->as_string;
HTTP::Request#as_string した結果:
POST http://example.com/api/issuance
Content-Length: 0
Content-Type: application/json
{"status":"success","expires_at":"2018-04-09T12:19:26+09:00"}
Content-Length: 0 になっていることが確認できる。