1

WWW::Mechanizeで基本認証の使用に問題があります。WWW :: Mechanizeの基本認証資格情報を設定する

ストリークは、HTTP Basic Authを使用して各リクエストにあなたのAPIキーで署名します。Streak APIに接続しようとしています。要求のユーザー名をAPIキーに設定するだけです。パスワードフィールドは無視されます。 HTTPリクエストは無視されるため、すべてのリクエストはHTTPS経由で行う必要があります。

curl https://www.streak.com/api/v1/pipelines -u YOUR_API_KEY:

私は正常にこの方法でcurlを使用してAPIにアクセスすることができます:ここでは

は、サンプルの要求です。しかし、私はWWW :: Mechanizeを使って正常に認証することができません。ここで私が持っているものです:

#!perl 

use warnings; 
use strict; 
use feature 'say'; 

use WWW::Mechanize; 

my $api = 'https://www.streak.com/api/v1/'; 

my $mech = WWW::Mechanize->new(autocheck => 0); # don't die on errors 

$mech->credentials('my API key here', ''); 

$mech->get($api . 'pipelines'); 

say $mech->response->status_line; 
say $mech->res->request->as_string; 

は私にそのコードを実行すると、取得:

401 Unauthorized 
GET https://www.streak.com/api/v1/pipelines 
Accept-Encoding: gzip 
User-Agent: WWW-Mechanize/1.83 

認証をしても試みられていません。なぜ誰かがそれが事実かもしれないと私はそれを修正するために何ができるだろうと示唆できますか?このコードはStrawberry Perl 5.24.0.1で動作しています。

[要求オブジェクトを検査するsimbabqueから提案を含めるように編集。]

+0

WWW :: Mechanizeが作成したHTTP :: Requestオブジェクトをcurlリクエストと比較しましたか? '$ mech-> res-> request-> as_string'を使って、Perl側のものを得ることができ、カールのために' curl -v'を使うことができます。 – simbabque

+0

興味深い。これは、認証をまったく行っていないことを示しています。 'GET https:// www.streak.com/api/v1/ipipeline' ' Accept-Encoding:gzip' 'User-Agent:WWW-Mechanize/1.83 ' –

+0

私は同じことを見た。非常に奇妙な。長い文字列を指定した場合は、それも行いません。しかし、私はこの機能を使用するコードを持っています。私は信じるものを見落としている。 – simbabque

答えて

1

私は問題を発見しました。

this post on Perl Maven(「URLとレルムを見つける方法」)の手法に従うと、接続しようとすると、APIがクレデンシャルにチャレンジを送信し、レルムを指定しないことがわかります。基本認証が必要であることを示すエラーメッセージが表示されます。 LWP :: UserAgentは、その時点で何もしないことを知っています。

だから、私が調べ提案simbabque成功したカール要求から認証ヘッダーをコピーして、手動でユーザーエージェントのオブジェクトにすることを設定します。

$ua->default_header('Authorization' => 'Basic [Base64-encoded string here]'); 

今では動作します。幸せな時間。

+0

これを理解してここに投稿するための名誉。 – xxfelixxx

+0

ねえ、ありがとう@xxfelixxx。うまくいけば、これは誰でもWWW :: Mechanizeを使用して、認証を適切に行わないリソースに遭遇することになります。このAPIは、[RFC 7235(HTTP/1.1):認証]セクション3.1。](https://tools.ietf.org/html/rfc7235#section-3.1)に準拠していないことに違反しています401 Unauthorized with WWW-Authenticateヘッダー。 –

関連する問題