none
Invoke-WebRequestでのAcceptヘッダ RRS feed

  • 質問

  • 次のようなcurlでの処理をInvoke-WebRequestで実行したいと思っています。

    curl --trace-ascii - -b cookies.txt -c cookies.txt -H 'Content-type: application/json' -H 'Accept: application/json' -X POST --user EMAIL:PASSWORD https://hogehoge

    Invoke-WebReqestでは次のように記述しています。

       $user = 'mail@hoge.com'
        $pass = 'password'
        $pair = "$($user):$($pass)"
        $encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
        $basicAuthValue = "Basic $encodedCreds"
        $Headers = @{
            Authorization = $basicAuthValue ;
            Accept = "application/json"
        }
    
        Invoke-WebRequest -Headers $Headers -Uri "https://hogehoge" -SessionVariable mySession  -ContentType "application/json"  -Method POST

    これを実行すると次のようなエラーがでて実行できません。

    Acceptヘッダの指定に問題がありそうですが、Acceptヘッダはどのように指定すればよいでしょうか?教えてください。

    Invoke-WebRequest : The 'Accept' header must be modified using the appropriate property or method.


    2015年8月5日 1:35

回答

  • Connectに類似の話題が出てますね。Invoke-WebRequestじゃなくてInvoke-RestMethodですが、原因は同じです。

    https://connect.microsoft.com/PowerShell/feedback/details/757249/invoke-restmethod-accept-header

    結論は、4.0で直した、だそうです。私の環境のPowershell 4.0で確認しましたが、確かに-HeadersにAcceptを追加しておけば正しくリクエストが行われているようでした。

    // PowerShell -version 3.0で動かした場合でも-HeadersにAcceptが有効だったのが謎。<追記>-version 3.0は4.0でインプレース更新されてるっぽい、のかな。-version 2.0だとちゃんと2.0で動いてるようだから-versionが全く無意味というわけではなさそうだけど。</追記>

    2015年8月5日 2:24