当其他客户成功时,HTTParty获得403

时间:2013-10-10 21:55:09

标签: ruby-on-rails ruby httparty

我正在尝试使用帖子和HTTParty创建资源。端点要求包含用户名和密码作为标头。使用chrome的rest客户端扩展,帖子很好,但是当我尝试使用HTTParty时,我得到403 Forbidden。我已经详细比较了结果请求,它们看起来完全相同。

我的HTTParty帖子:

response = HTTParty.post(OpenIdm.end_point + extension_create,
        headers: {'X-OpenIDM-Username' => "<USERNAME>", 'X-OpenIDM-Password' => "<PASSWORD>"},  
        body: payload_hash.to_json 
    )

这是一个相当简单的帖子请求,我直接尝试使用Ruby的Net :: HTTP类以及另一个gem,RestClient。在所有情况下,我得到403而其他发布方法(那些不使用ruby)运行正常。这怎么可能在其他地方工作,但不能在Ruby工作?

更新

以下是帖子的调试输出:

opening connection to <HOST>...
opened
<- "POST /openidm/managed/user/234acbef-c501-4dbb-9501-b1dd45411928 HTTP/1.1\r\nX-Openidm-Username: <USERNAME>\r\nX-Openidm-Password: <PASSWORD>\r\nConnection: close\r\nHost: <HOST>.com:8080\r\n\r\n"

-> "HTTP/1.1 403 Forbidden\r\n"

-> "Set-Cookie: JSESSIONID=1mfz68wywh1jg1l3m04dprt0eu;Path=/\r\n"

-> "Expires: Thu, 01 Jan 1970 00:00:00 GMT\r\n"

-> "Content-Type: application/json; charset=UTF-8\r\n"

-> "Date: Fri, 11 Oct 2013 13:02:47 GMT\r\n"

-> "Accept-Ranges: bytes\r\n"

-> "Server: Restlet-Framework/2.0.15\r\n"

-> "Connection: close\r\n"

-> "\r\n"
reading all...

-> "{\"error\":403,\"reason\":\"Forbidden\",\"message\":\"Access denied\"}"

read 60 bytes

Conn close

{"error"=>403, "reason"=>"Forbidden", "message"=>"Access denied"}

1 个答案:

答案 0 :(得分:0)

看起来这可能是Net :: HTTP如何处理标头的问题。我已经尝试了遏制宝石,一切都运行正常。唯一的缺点是增加了对卷曲的依赖。对于那些好奇的人来说,这是解决方法:

http = Curl.post("<HOST>/openidm/managed/user/e9d105c0-14a5-0131-0eab-10ddb19e6b69", json 
    do |http|
        http.headers['X-OpenIDM-Username'] = '<USERNAME>'
        http.headers['X-OpenIDM-Password'] = '<PASSWORD>'
    end