panco’s blog

興味が沸いたことを書く

Windows PowerShell で curl コマンドを実行する方法

『Real World HTTP』を読んでいて、curl コマンドでヘッダ送信する際にエラーになったため対処を記載する。

www.oreilly.co.jp

実行環境

対処前(エラー)

実行コマンド

curl --http1.0 -H "X-Test: Hello" http://localhost:18888

実行結果

Invoke-WebRequest : パラメーター 'Headers' をバインドできません。"X-Test: Hello" の値を "System.String" 型から "System.Collections.IDictionary" 型に変換
できません。
発生場所 行:1 文字:19
+ curl --http1.0 -H "X-Test: Hello" http://localhost:18888
+                   ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest]、ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

対処

エイリアスの設定を削除する。

デフォルトのエイリアス設定

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           curl -> Invoke-WebRequest

エイリアス削除コマンド

設定の解除は、その PowerShell コンソールのセッションでのみ有効。

del alias:curl

エイリアス削除コマンド実行後、エイリアス設定は以下の通り解除されている状態となる。

PS C:\Users\fossi\01_research\01_programming\go> Get-Alias curl
Get-Alias : name 'curl' を含むエイリアスは存在しないため、このコマンドは一致するエイリアスを見つけられません。
発生場所 行:1 文字:1
+ Get-Alias curl
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (curl:String) [Get-Alias], ItemNotFoundException
    + FullyQualifiedErrorId : ItemNotFoundException,Microsoft.PowerShell.Commands.GetAliasCommand

対処後(正常)

実行コマンド

curl --http1.0 -H "X-Test: Hello" http://localhost:18888

実行結果

curl コマンドが正常に実行され、期待通りの結果が得られた。

GET / HTTP/1.0
Host: localhost:18888
Accept: */*
User-Agent: curl/8.4.0
X-Test: Hello

補足

他の対処として、エイリアス削除コマンドを実行せず、curl.exeとつけて実行する方法もあるらしい。

curl.exe --http1.0 -H "X-Test: Hello" http://localhost:18888