1

我需要使用 rubyrest-client​​ gem 发布到 REST 资源。

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

我的红宝石代码是:

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

但它返回 403 禁止。我想知道我的红宝石错在哪里。谢谢。

顺便说一句,如何捕获 ruby​​ 代码发送的 HTTP 流量?我正在使用 MAC。

4

1 回答 1

1

我对 Ruby 不是最熟悉,但我认为您的代码存在两个问题。somefolder正在作为内容而不是路径发送,并且文件夹folder正在被修改。我认为红宝石请求看起来像这样。

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 请求。

于 2012-01-03T05:26:17.830 回答