3

私が気付いた奇妙な何か...Powershellで、次のことを試みた場合:

$uri = new-object System.Uri("http://builds.strongbadia.egg:8080/builds/package.tar.bz2")
$clnt = new-object System.Net.WebClient
$clnt.Credentials = new-object System.Net.NetworkCredential($username, $password)
$clnt.DownloadFile($uri, "package.tar.bz2")

「Authorization」ヘッダーは送信されません(Wiresharkで確認されます)。クレデンシャルキャッシュを使用し、特に基本認証を使用する必要があると述べている場合でも、次のようになります。

$cred = new-object System.Net.NetworkCredential($username, $password)
$credcache = new-object System.Net.CredentialCache
$credcache.Add($uri, "Basic", $cred)
$clnt.Credentials = $credcache

ヘッダーはまったく送信されません。代わりに、次のことを行う必要があります。

$auth = 'Basic ' + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($username+":"+$password ))
$clnt.Headers.Add('Authorization', $auth)

そうして初めて、「Authorization」ヘッダーが送信されます。これは基本的に、PowerShellの喉に物をぶつけていたためです。

これが既知の欠陥なのか、それとも私が間違ったことなのか、何か考えはありますか?私はそれへの参照を見つけることができないようです。

4

1 に答える 1

3

私は実際にこれを以前に見ました。基本的に、.Netライブラリは、資格情報を送信する前に、サーバーからの認証のチャレンジを待ちます。問題は、一部のサーバーがリクエストを送信しないことです。そのため、ヘッダーが追加されていることがわかりません。方法が機能する理由は、ヘッダーをヘッダーコレクションに明示的に強制しているためです。

また、PowerShellだけでなく、どの.Net言語でも発生します。

于 2012-11-22T07:54:54.753 に答える