/ / Nie równoważny kod REST między php a ruby ​​- ruby, rest, rest-client

Nie równoważny kod REST między php i ruby ​​- ruby, rest, rest-client

Muszę publikować w zasobach REST przy użyciu ruby rest-client klejnot.

Przykładem żądania HTTP jest:

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

i zapewnia kod demonstracyjny napisany w php i działa dobrze:

<?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);
?>

Mój kod ruby ​​to:

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

Ale zwraca 403 zabronione. Chciałbym wiedzieć, gdzie mój rubin jest zły. Dzięki.

BTW, jak mogę przechwytywać ruch HTTP wysyłany przez kod ruby? Używam MAC.

Odpowiedzi:

1 dla odpowiedzi № 1

Nie znam się najlepiej na Ruby, ale myślę, że są dwa problemy z twoim kodem. somefolder jest wysyłany jako treść zamiast ścieżki i folderu folder jest modyfikowany. Myślę, że tak będzie wyglądać żądanie ruby.

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

somefolder

Moje czytanie dokumentacja zasugeruj, że przejście do następującego spowoduje naprawienie ścieżki, ale nie jestem pewien, czy możesz naprawić nazwę klienta po stronie nagłówka.

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

Może być konieczne dołączenie pustego ciągu lub wartości zerowej dla treści.

Posługiwać się Charles Proxy aby zobaczyć żądania HTTP.