Подтвердить что ты не робот

Сканирование Apache и POST

Я пытаюсь использовать apache bench для загрузки теста действия create в моем приложении rails, но ab, похоже, не отправляет данные POST, хотя он правильно передает POST, а не запрос GET.

это команда, которую я запускаю:

ab -n 1 -p post -v 4 "http://oz01.zappos.net/registrations"

и это содержимое почтового файла:

authenticity_token=M18KXwSOuIVbDPZOVQy5h8aSGoU159V9S5uV2lpsAI0

в журналах rails отображается запрос POST, но не отображаются какие-либо параметры:

Started POST "/registrations" for 10.66.210.70 at Thu Sep 09 17:48:06 -0700 2010
  Processing by RegistrationsController#create as */*
Rendered registrations/new.html.erb within layouts/application (14.0ms)
Completed 200 OK in 24ms (Views: 14.6ms | ActiveRecord: 0.1ms)

тогда как запрос POST, поступающий из браузера, приводит к этой записи в журнале:

Started POST "/registrations" for 192.168.66.20 at Thu Sep 09 17:49:47 -0700 2010
  Processing by RegistrationsController#create as HTML
  Parameters: {"submit"=>"true", "authenticity_token"=>"AfNG0UoTbJXnxke2725efhYAoi3ogddMC7Uqu5mAui0=", "utf8"=>"\342\234\223", "registration"=>{"city"=>"", "address"=>"", "name"=>"", "zip"=>"", "optin"=>"0", "state"=>"", "email"=>""}}
Rendered registrations/new.html.erb within layouts/application (13.7ms)
Completed 200 OK in 24ms (Views: 14.3ms | ActiveRecord: 0.1ms)

и, наконец, это то, что ab записывает для запроса:

---
POST /registrations HTTP/1.0
User-Agent: ApacheBench/2.0.40-dev
Host: oz01.zappos.net
Accept: */*
Content-length: 63
Content-type: text/plain


---

почему он не поднимает данные сообщения?

если "пост" не существует, тогда я получаю сообщение об ошибке, в котором говорится, что он не может найти файл, поэтому я знаю, по крайней мере, он находит файл...

4b9b3361

Ответ 1

Возможно, вам нужен параметр -T, как указано в man ab: -

ab -n 1 -p post -v 4 -T application/x-www-form-urlencoded "http://oz01.zappos.net/registrations"

Я тестировал Django, и кажется, что Django действительно не заботится о заголовке типа контента (он отображал содержимое POSTed, независимо от того, использовал ли я -T или нет), но Rails, возможно, захочет его.

Ответ 2

Старый вопрос, но ради любого, кто ищет SO для этого, вот как я его заработал.

Сделайте EXTRA уверенным, что ваш почтовый файл правильно закодирован URL-адресом без лишних непечатаемых символов или чего-либо в конце. Самый безошибочный способ - просто создать его с помощью кода. Я использовал некоторый питон для создания моего:

>>> import urllib
>>> outfile = open('post.data', 'w')
>>> params = ({ 'auth_token': 'somelongstringthatendswithanequalssign=' })
>>> encoded = urllib.urlencode(params)
>>> outfile.write(encoded)
>>> outfile.close()

Пример вывода:

auth_token=somelongstringthatendswithanequalssign%3D