我正在尝试编写一个Ruby脚本来使用图片库网站Piwigo上的API,这要求您首先使用一个HTTP帖子登录并使用另一个帖子上传图像。
这是我到目前为止所得到的但是它不起作用,只是返回401错误,有人能看到我错在哪里吗?
require 'net/http'
require 'pp'
http = Net::HTTP.new('mydomain.com',80)
path = '/piwigo/ws.php'
data = 'method=pwg.session.login&username=admin&password=password'
resp, data = http.post(path, data, {})
if (resp.code == '200')
cookie = resp.response['set-cookie']
data = 'method=pwg.images.addSimple&image=image.jpg&category=7'
headers = { "Cookie" => cookie }
resp, data = http.post(path, data, headers)
puts resp.code
puts resp.message
end
运行时会给出此响应;
$ ruby piwigo.rb
401
Unauthorized
他们的API页面上有一个Perl示例,我尝试将其转换为Ruby http://piwigo.org/doc/doku.php?id=dev:webapi:pwg.images.addsimple
答案 0 :(得分:1)
通过使用nice_http gem:https://github.com/MarioRuiz/nice_http NiceHttp将照顾您的cookie,因此您无需执行任何操作
require 'nice_http'
path = '/piwigo/ws.php'
data = '?method=pwg.session.login&username=admin&password=password'
http = NiceHttp.new('http://example.com')
resp = http.get(path+data)
if resp.code == 200
resp = http.post(path)
puts resp.code
puts resp.message
end
如果您愿意,也可以使用http.cookies添加自己的cookie。
答案 1 :(得分:0)
您可以使用名为mechanize
的宝石。它透明地处理cookie。