1

私はrubyに移植しようとしているいくつかのperlコードを持っています。perlコードは私がやりたいことを実行しますが、私が実行していることはそれほど複雑ではないため、rubyコードから同様の結果を得るのにいくつかの困難があります。

まず、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);

次に、$ res-> contentにアクセスして、必要なものを取得できます。

net / 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)

考え?提案?なぜ私がバカなのか教えてください。ありがとう。

4

1 に答える 1

3

Mechanizeを試してみてください。Cookieを実行してリダイレクトします。

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

クッキーが設定されました

response = agent.get url2
于 2012-04-23T00:58:14.880 に答える