从G-WAN / Ruby获取POSTed数据
有没有办法从G-WAN Ruby获取POST数据?
我试过了:
ENV.each do |k,v| puts "#{k} => #{v}
" end exit(200)
并使用以下方法测试:
curl -d 'test2=1' 'http://127.0.0.1:8080/?test.rb&test=1' | gunzip -
但是没有显示的post数据(test2):
GATEWAY_INTERFACE => CGI/1.1
CONTENT_TYPE => urlencoded
REMOTE_HOST => 127.0.0.1
USER => lab-hci-48
REMOTE_ADDR => 127.0.0.1
QUERY_STRING => test.rb&test=1
CONTENT_LENGTH => 7
PATH_TRANSLATED => /home/lab-hci-48/gwan/0.0.0.0_8080/#0.0.0.0/csp
REQUEST_URI => POST /?test.rb&test=1
SERVER_SOFTWARE => G-WAN
PATH => /home/lab-hci-48/.rvm/gems/ruby-2.1.1/bin:/home/lab-hci-48/.rvm/gems/ruby-2.1.1@global/bin:/home/lab-hci-48/.rvm/rubies/ruby-2.1.1/bin:/home/lab-hci-48/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
LANG => en_US.UTF8
SERVER_PROTOCOL => HTTP/1.1
PATH_INFO => /
SHELL => /bin/bash
REQUEST_METHOD => POST
PWD => /home/lab-hci-48/gwan
SERVER_PORT => 8080
SCRIPT_NAME => test.rb
SERVER_NAME => 0.0.0.0
是否有任何其他变量我应该检查以获取POST数据?
在我的ruby脚本中,我使用此代码来获取数据:
# Get arguments k = "" @params = {} ARGV.each do|a| if a.split("=").size > 1 a = a.split("=") @params[a[0]] = a[1] else if k == "" k = a else @params[k] = a k = "" end end end
它会像在Rails中一样创建一个params变量;)
是否有任何其他变量我应该检查以获取POST数据?
当REQUEST_METHOD
是HTTP_POST
, CONTENT_LENGTH
和CONTENT_TYPE
都可以让你找到POST
实体的属性(与HTTP_PUT
相同的故事)。
X_HTTP_HEADERS
值(去年添加)使得查找HTTP头的末尾( POST
实体所在的位置)更容易,更快 – 但是可以在Ruby脚本中找到HTTP头的结尾(双CRLF
)从REQUEST_URI
或QUERY_STRING
。
/csp/hello.rb
G-WAN示例显示了如何列出查询参数:
# list QUERY PARAMETERS, if any: # # GET http://10.10.200.80/?hello.rb&arg1=123&arg2=456 arg: arg1=123 arg: arg2=456 ARGV.each do|a| puts "arg: #{a}
" end