/ / No es un código REST equivalente entre php y ruby ​​- ruby, rest, rest-client

Código REST no equivalente entre php y ruby ​​- ruby, rest, rest-client

Necesito publicar en un recurso REST usando ruby rest-client joya.

El ejemplo de solicitud HTTP es:

POST /somefolder HTTP/1.1
Authorization: Basic YWFhOmFw
Host: example.com
folder: creat

y proporciona un código de demostración escrito en php, y funciona bien:

<?php
$process = curl_init("example.com/somefolder");
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_POSTFIELDS, "");
curl_setopt($process, CURLOPT_HTTPHEADER, array("folder: true"));
curl_setopt($process, CURLOPT_USERPWD, "username:password");
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_FOLLOWLOCATION, 1);
print(curl_exec($process)."<br/>");
print(curl_getinfo($process, CURLINFO_HEADER_OUT)."<br/>");
curl_close($process);
?>

Mi código rubí es:

resource = RestClient::Resource.new("http://example.com/", :user => "username", :password => "password")
resource.post "somefolder", :folder => "true"

Pero vuelve 403 prohibido. Me gustaría saber dónde está mal mi rubí. Gracias.

Por cierto, ¿cómo puedo capturar el tráfico HTTP enviado por código ruby? Estoy usando MAC.

Respuestas

1 para la respuesta № 1

No estoy familiarizado con Ruby, pero creo que hay dos problemas con su código. somefolder Se envía como el contenido en lugar de la ruta y la carpeta folder se está modificando Lo que creo que la solicitud de rubí se verá es esto.

POST / HTTP/1.1
Authorization: Basic YWFhOmFw
Host: example.com
X-Folder: true

somefolder

Mi lectura del documentación sugiero que cambiar a lo siguiente solucionará la ruta, pero no estoy seguro de si puede arreglar el nombre del encabezado del lado del cliente.

resource = RestClient::Resource.new("http://example.com/", :user => "username", :password => "password")
resource["somefolder"].post, :folder => "true"

Es posible que deba incluir una cadena vacía o un valor nulo para el contenido.

Utilizar Charles Proxy para ver las solicitudes HTTP.