11

URL (例: http://www.foo.com/alink.pl?page=2 ) がある場合、別のリンクにリダイレクトされているかどうかを判断したいと考えています。最終的な URL も知りたいです (例: http://www.foo.com/other_link.pl )。最後に、Perl と Groovy でこれを実行できるようにしたいと考えています。

4

6 に答える 6

16

パールでは:

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;

my $request  = HTTP::Request->new( GET => 'http://google.com/' );
my $response = $ua->request($request);
if ( $response->is_success and $response->previous ) {
    print $request->url, ' redirected to ', $response->request->uri, "\n";
}
于 2008-10-30T20:35:24.323 に答える
8

ええと、私はPerlとgroovyのどちらについても何も知らないので、HTTPの観点から別のものを提供し、あなたは適応する必要があります。

通常、HTTPリクエストを作成すると、応答コードとともにHTMLテキストが返されます。Successの応答コードは200です。300の範囲の応答コードは、何らかの形のリダイレクトです。

于 2008-10-30T20:00:31.397 に答える
4

Jamesの答えを参照してください-サンプルHTTPセッション:

$ telnet www.google.com 80
HEAD / HTTP/1.1
HOST: www.google.com


HTTP/1.1 302 Found
Location: http://www.google.it/
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: ##############################
Date: Thu, 30 Oct 2008 20:03:36 GMT
Server: ####
Content-Length: 218

GETの代わりにHEADを使用すると、ヘッダーのみが取得されます。「302」は一時的なリダイレクトを意味し、「Location:」はリダイレクト先の場所です。

于 2008-10-30T20:08:11.820 に答える
3

概念を示す簡単で汚い groovy スクリプト -- 注: これはjava.net.HttpURLConnectionを使用しています。

リダイレクトを検出するには、setFollowRedirects(false). そうしないと、とにかくリダイレ​​クトされたページresponseCodeに 200 の a が表示されます。欠点は、リダイレクトを自分でナビゲートする必要があることです。

URL url = new URL ('http://google.com')
HttpURLConnection conn = url.openConnection()
conn.followRedirects = false
conn.requestMethod = 'HEAD'
println conn.responseCode
// Not ideal - should check response code too
if (conn.headerFields.'Location') {
  println conn.headerFields.'Location'
}

301
["http://www.google.com/"]
于 2008-10-30T22:42:07.593 に答える
2

Perlでは、そのためにLWP::Useragentを使用できます。response_redirect最も簡単な方法は、を使用してハンドラーを追加することだと思いadd_handlerます。

于 2008-10-30T20:03:38.320 に答える
1

これは301リダイレクトで機能すると思います。

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;

my $request  = HTTP::Request->new( GET => 'http://google.com/' );
my $response = $ua->request($request);
if ( $response->is_redirect  ) {
    print $request->url . " redirected to location " .  $response->header('Location') .  "\n";
} 
于 2011-06-12T22:27:59.850 に答える