Не эквивалентный код REST между php и ruby - PullRequest
1 голос
/ 03 января 2012

Мне нужно опубликовать на ресурсе REST, используя рубин rest-client gem.

Пример HTTP-запроса:

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

, и он предоставляет демонстрационный код, написанный на php, и хорошо работает:

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

Мой код ruby:

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

Но возвращает 403 запрещено.Я хотел бы знать, где мой рубин не так.Спасибо.

Кстати, как мне перехватить HTTP-трафик, отправленный с помощью кода ruby?Я использую MAC.

1 Ответ

1 голос
/ 03 января 2012

Я не очень хорошо знаком с Ruby, но думаю, что с вашим кодом есть две проблемы.somefolder отправляется как содержимое, а не путь, и папка folder изменяется.Я думаю, что запрос ruby ​​будет выглядеть так:

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

somefolder

Мое чтение документации предполагает, что переключение на следующее исправит путь, но я не уверен, что выможет исправить имя заголовка на стороне клиента.

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

Возможно, вам придется включить пустую строку или нулевое значение для содержимого.

Используйте Charles Proxy для просмотраHTTP-запросы.

...