Здесь хорошее практическое руководство
существует 7 типов сценариев, чем можно запустить во время Процесса установки:
InstallationCheck: Этот сценарий запускается в начале процесса установки (даже перед шагом Аутентификации). Это может использоваться, чтобы проверить, что Пакет может быть установлен на этом компьютере.
VolumeCheck: Этот сценарий запускается на "Избранном Целевом" шаге. Это используется для определения, на котором объеме может быть установлен Пакет.
предварительный полет: Этот сценарий запускается сразу после того, как пользователь нажал на кнопку "Install".
предварительно устанавливают / предварительное обновление: Этот сценарий запускается после сценария перед полетом, если существует один (в случае единственной установки пакета); иначе сразу после того, как пользователь нажал на кнопку "Install".
, Как Вы видите, существует 2 типа сценариев здесь. Предварительно устанавливание того запускается, когда Пакет никогда не устанавливался (с точки зрения Installer.app), предварительное обновление, каждый запускается, когда Пакет был уже установлен. Чтобы определить, был ли Пакет уже установлен или нет, Installer.app взглянул на содержание следующего каталога:/Library/Receipts. Если существует файл по имени PackageName.pkg в нем, то Пакет был уже установлен, иначе это - первая установка.
постустановка / постобновление: Этот сценарий запускается после того, как файлы в пакете были установлены. Посмотрите (предварительно установите / предварительное обновление) видеть, какой запускается.
послеполетный: Этот сценарий запускается после постустановки / сценарий постобновления или когда пакет был установлен.
Они также возникают время от времени, когда я кодирую. Вы можете переместить второй оператор using в другую функцию?
Механизируйте , чтобы переопределить метод post
, чтобы пользовательские заголовки передавались частному методу post_form
.
Например,
class WWW::Mechanize
def post(url, query= {}, headers = {})
node = {}
# Create a fake form
class << node
def search(*args); []; end
end
node['method'] = 'POST'
node['enctype'] = 'application/x-www-form-urlencoded'
form = Form.new(node)
query.each { |k,v|
if v.is_a?(IO)
form.enctype = 'multipart/form-data'
ul = Form::FileUpload.new(k.to_s,::File.basename(v.path))
ul.file_data = v.read
form.file_uploads << ul
else
form.fields << Form::Field.new(k.to_s,v)
end
}
post_form(url, form, headers)
end
end
agent = WWW::Mechanize.new
agent.post(URL,POSTDATA,{'custom-header' => 'custom'}) do |page|
p page
end
Я нашел этот пост с помощью веб-поиска (я знаю, что два месяца спустя) и просто хотел поделиться другим решением.
Вы можете добавлять собственные заголовки без исправления обезьяны, используя механизировать, используя предварительную версию. крючок подключения:
agent = WWW::Mechanize.new
agent.pre_connect_hooks << lambda { |p|
p[:request]['X-Requested-With'] = 'XMLHttpRequest'
}
ajax_headers = { 'X-Requested-With' => 'XMLHttpRequest', 'Content-Type' => 'application/json; charset=utf-8', 'Accept' => 'application/json, text/javascript, */*'}
params = {'emailAddress' => 'me@my.com'}.to_json
response = agent.post( 'http://example.com/login', params, ajax_headers)
Приведенный выше код работает для меня (Mechanize 1.0) как способ заставить сервер думать, что запрос поступает через AJAX, но, как указано в других ответах, это зависит от того, что сервер ищет, он будет отличаться для разных фреймворков. Комбинации библиотек / js.
Лучше всего использовать плагин Firefox HTTPLiveHeaders или HTTPScoop и посмотреть заголовки запросов, отправленные браузером, и просто попытаться воспроизвести их.