POSTANDO em aplicativos Rails com PHP e fita adesiva

Digamos que você tenha um aplicativo RESTful Rails para o qual precisa fazer uma solicitação de postagem de um script PHP. Não é minha função perguntar por que você teria uma criação mutante, mas aqui está como você faria isso:

Primeiro, desative a proteção CSRF em seu aplicativo Rails (você sabe que está com problemas quando a primeira coisa que você precisa fazer é desativar a proteção CSRF):

#/app/controller/application_controller.rb

protect_from_forgery
:except => [:create, :update]

Agora, para fins de argumentação, digamos que seu script PHP está pegando um modelo exposto como JSON, alterando um atributo e, em seguida, atualizando-o de volta para o servidor.

Primeiro, vamos pegar o JSON e definir a variável

$json = file_get_contents("http://0.0.0.0:3000/my_modesl/13.json")
$model
= json_decode($json)
$model
->my_attribute = "foo"

Uma vez que este modelo será eventualmente re-serializado e PUT de volta ao servidor, precisamos nos livrar dos atributos created_ate updated_at, uma vez que eles não sãoattribute_accessible

unset($model->created_at, $model->updated_at)

Agora prepararemos as solicitações HTTP mais básicas
$ url = ‘ http://0.0.0.0:3000/my_models/13.json ‘;
$ options = array (
‘http’ => array (
‘header’ => “Content-type: application / x-www-form-urlencoded r n”,
‘method’ => ‘PUT’,
‘content’ = > consulta de construção http (array (‘my_model’ => $ model)),
),
);

Observe como o $modelobjeto deve ser empacotado em um array. É assim que Rails gosta. Para finalizar, enviaremos o pedido.

$context  = stream_context_create($options);
$result
= @file_get_contents($url, false, $context);

Heh, observe o @na frente de file_get_contents? Isso é para suprimir quaisquer erros ou avisos que possam surgir e é totalmente opcional.

Parabéns, você criou um monstro!