2012-04-12 19 views
3

NTLM認証で構成されたIISサーバーに対してLWPを動作させようとしています。 NTLM認証がサーバー上でオフになっている場合、コードは正常に機能するので、ここで唯一の問題はNTLM認証であると仮定します。NTLM認証でLWPを使用する場合のサブルーチンエントリのワイド文字

はこれまでのところ、私は、次があります。

my $ua = LWP::UserAgent->new(agent => "whatever", 
          timeout => $timeout, keep_alive => 1); 
$ua->credentials('hostname:80', '', $username, $password); 

my $hdr = HTTP::Headers->new("Content-Type" => "text/xml; charset=UTF-8", 
          "SOAPAction" => "\"whatever\""); 

my $req = HTTP::Request->new("POST" => $url, $hdr, encode_utf8($post)); 
$res = $ua->request($req); 

私はデバッグをオンにした場合、私は次のメッセージを得る:wgetと同じURLにアクセスしようとしている

LWP::UserAgent::new:() 
LWP::UserAgent::request:() 
LWP::UserAgent::send_request: POST http://hostname 
LWP::UserAgent::_need_proxy: Not proxied 
LWP::Protocol::http::request:() 
LWP::Protocol::http::request: Keep the http connection to hostname:80 
LWP::UserAgent::request: Simple response: Unauthorized 
LWP::Authen::Ntlm::authenticate: authenticate() has been called 
Use of uninitialized value in exists at /usr/lib/perl5/vendor_perl/5.8.5/LWP/UserAgent.pm line 560. 
Use of uninitialized value in hash element at /usr/lib/perl5/vendor_perl/5.8.5/LWP/UserAgent.pm line 561. 
LWP::Authen::Ntlm::authenticate: In first phase of NTLM authentication 
[Thu Apr 12 13:55:28 2012] [error] Wide character in subroutine entry at /usr/lib/perl5/site_perl/5.8.5/Authen/NTLM.pm line 346.\n 
LWP::Protocol::collect: read 625 bytes 
LWP::UserAgent::request: Simple response: Internal Server Error 

が正常に動作します。 MIME::Base64のドキュメントは$バイトが、私はここに不可欠な何かが足りない

255上記のコードを持つ文字が含まれている場合、エンコード機能がWide character in subroutine entryとcroakし、またはこれはAuthen::NTLMにかかわる問題であることができることを言いますか?

+1

を使用し、 'LWP ::のAuthen :: Ntlm'は*モジュールはのAuthen :: NTLMモジュールを活用して言いますマークブッシュ著 もまた、 全く異なるインターフェイスを持つYee Man ChanによってCPANから入手可能な別のAuthen :: NTLMモジュールであるため、正しい NTLMモジュールを持つ必要があります。*これは問題の可能性がありますか? – Borodin

+0

@Borodin:このモジュールは、Mark Bushを著者セクションに記載しています。私はLWPに必要な特定のバージョンもインストールしました。私はAuthen :: NTLM 1.09を持っていましたが、LWPのバージョンは1.02を使用していますが、同じエラーが発生します。 – Vetle

+1

こんにちはVetle :)あなたの '$ username'か' $ password'には万が一非ASCII文字が含まれていますか? – cosimo

答えて

-1

$ postには何が入っていますか?たぶん、不良データが含まれています。

これを試してみてください:

my $post_encoded = encode_utf8($post); 
print Dumper($post,$post_encoded); 
my $req = HTTP::Request->new("POST" => $url, $hdr, $post_encoded); 
+0

'$ post_encoded'を 'asdasd'に置き換えてみました。同じエラーメッセージが表示されました。 NTLM認証をサーバーで無効にしてテストしましたが、正常に動作します。 NTML認証プロセス*は、別々のHTTPリクエストで発生するので、投稿したいものに依存しないようにする必要があります。 – Vetle

+0

encode_utf8は、文字列をutf-8に変換するだけでなく、utf-8フラグを設定します。このようにして、perlの内部はutf-8の値を含んでいることがわかります。あるいは逆の方法で試してみると、decode_utf8を使うことができます。 – user1126070

+0

これは無関係です。私は$ post_encodedを 'asdasd'に置き換えました(全くエンコードすることなく)、それでも動作しません。 – Vetle

-4

はちょうど私がのためにドキュメントを気づくカール

curl --ntlm -u 'username:password' url 
+0

ありがとうございますが、本当に役に立たないです。 ;)Wgetもうまく動作しますが、LWPで動作させるにはこれが必要です。 – Vetle