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 № 1Nie 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.