Как вы, возможно, уже знаете, когда параметры и их значения кодируются с помощью urlencoded, они разделяются =
: name=Theo&language=ruby
и т. Д.
Именно поэтому имя первого параметра останавливается на символе перед =
. Подход с использованием первого ключа, описанный в этом сообщении в блоге, не совсем надежен.
Вместо этого в CGI-скрипте вы можете прочитать тело запроса непосредственно из stdin, например:
request_body = $stdin.read
Обратите внимание, что когда вы создаете экземпляр объекта CGI
, он будет читать все со стандартного ввода и пытаться разобрать его в хэш params
.
Это означает, что если вы все еще хотите использовать библиотеку cgi
для построения своего ответа, вам нужно прочитать из stdin ранее в коде, до создания объекта CGI. например,
# minimal example that just outputs the request body
require 'cgi'
request_body = $stdin.read
cgi = CGI.new
cgi.out("status" => "OK", "type" => "text/plain", "connection" => "close") do
request_body
end