2012-04-23 110 views
1

我有一些perl代码,我试图移植到ruby。 perl代码做我想做的,但我有一些困难从ruby代码中获得类似的结果,这更令人沮丧,因为我所做的并不复杂。红宝石网/ http难点

第一,Perl代码:

use LWP::UserAgent; 
use HTTP::Cookies; 

my $cookie_jar = HTTP::Cookies->new(file => "/home/blah/lwpcookies.txt", autosave => 0); 
my $ua  = LWP::UserAgent->new('cookie_jar' => $cookie_jar); 

my $p = { 
    'param1' => 'p1val', 
    'param2' => 'p2val', 
    'param3' => 'p3val', 
    'param4' => 'p4val', 
    'param5' => 'p5val', 
    'param6' => 'p6val', 
    }; 

my $res = $ua->post('https://sitename.somesite.com/login_page.php', $p); #login 
my $url = "https://sitename.sometime.com/report.php?startdate=2012-1-1&enddate=2012-1-2"; 
$res = $ua->get($url); 

然后我就可以访问$水库 - >内容,让我想出来的东西。

我已经尝试使用净/ http的红宝石,但我无法得到相同的结果。我在计算哪些部件甚至无法工作时也遇到一些困难。

这里的Ruby代码:

require 'net/http' 
params = Hash.new 
params['param1'] = 'p1val' 
params['param2'] = 'p2val' 
params['param3'] = 'p3val' 
params['param4'] = 'p4val' 
params['param5'] = 'p5val' 
params['param6'] = 'p6val' 

uri = URI.parse('https://sitename.somesite.com/login_page.php') 
http = Net::HTTP.new(uri.host, uri.port) 

http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

request = Net::HTTP::Post.new(uri.request_uri) 
request.set_form_data(params) 
res = http.request(request) 
cookies = res.response['set-cookie'] 

# for what it's worth, I'm pretty sure the problem has already occurred by this point 
uri = URI.parse("https://sitename.somesite.com/report.php?startdate=2012-1-1&enddate=2012-1-2") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

request = Net::HTTP::Get.new(uri.request_uri) 
request['Cookie'] = cookies 

res = http.request(request) 

的思考?建议?告诉我为什么我是白痴?谢谢。

+0

什么问题?你得到一个例外或什么? – 2012-04-23 00:30:25

+0

在认证部分,res.code为302,res.body为空。我尝试追逐重定向,但它似乎在两页之间来回跳动。 – 2012-04-23 00:36:27

回答

3

尝试Mechanize,它确实饼干和重定向你:

require 'mechanize' 
agent = Mechanize.new 
agent.post url1, params 

cookie设置现在

response = agent.get url2 
+0

这使得生活更简单!谢谢! – 2012-04-23 01:06:47