2014-02-14 2 views
0

Когда я запускаю следующую часть моего кода, появляется сообщение об ошибке« undefined method `each» for nil: NilClass.request.body.split ('&'). Каждый из них отображает неопределенный метод `each 'для nil: NilClass

if request and request.body 
    print_status(request.body); 
    request.body.split('&').each { |var| 
    parts = var.split('=', 2) 
    if parts.length != 2 
     print_error("Weird, we got a var that doesn't contain an equals: #{parts.inspect}") 
    else 
     fln,fld = parts 
     fld = Rex::Text.uri_decode(fld) 
     if fln == "script" 
     script = fld 
     end 
    end 
    } 
end 


Некоторые тесты с request.body:

 
- ---------------------------------- 
- request.body.class: String 
- request.body: script=test 
- request.body.split('&'): ["script=test"] 
- Sending 
- ---------------------------------- 
- request.body.class: String 
- request.body: script=alert%28%27ok%27%29%3B 
- request.body.split('&'): ["script=alert%28%27ok%27%29%3B"] 
- Sending 
- ---------------------------------- 
- request.body.class: String 
- request.body: script=alert%28%27ok%27%29%3B%3D 
- request.body.split('&'): ["script=alert%28%27ok%27%29%3B%3D"] 
- Exception handling request: undefined method `each' for nil:NilClass 
- ---------------------------------- 
- request.body.class: String 
- request.body: script=alert%28%27ok%27%29%3B%5D 
- request.body.split('&'): ["script=alert%28%27ok%27%29%3B%5D"] 
- Exception handling request: undefined method `each' for nil:NilClass 
- ---------------------------------- 
- request.body.class: String 
- request.body: script=alert%28%27ok%27%29%3B- 
- request.body.split('&'): ["script=alert%28%27ok%27%29%3B-"] 
- Exception handling request: undefined method `each' for nil:NilClass 
- ---------------------------------- 
- request.body.class: String 
- request.body: script=alert%28%27ok%27%29%3B+ 
- request.body.split('&'): ["script=alert%28%27ok%27%29%3B+"] 
- Exception handling request: undefined method `each' for nil:NilClass 

Большинство специальных символов делают происходит ошибка.
Что может быть неправильным?

+1

Что такое 'request.body'? Строка? –

+0

Да, это строка. – Robert

+0

Действительно ли это 'request.body.split ('&'). Каждая строка выбрасывает исключение? Я не вижу здесь проблемы, если 'request.body.split ('&')' всегда является строкой. –

ответ

1

Пожалуйста, попробуйте использовать request.body.read вместо request.body.

ActionDispatch::Request.body метод StringIO, см: http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-body

+0

Отображает запрос обработки исключений: неопределенный метод 'read 'for" script = alert% 28% 27ok% 27% 29% 3B ": String – Robert

+0

, если request.body - скрипт = предупреждение% 28% 27ok% 27% 29% 3B работает, если это скрипт = предупреждение% 28% 27ok% 27% 29% 3B% 3D it doens Не работай. – Robert

+0

И в обоих случаях это тип string? –