Powershell 无法将curl转换为Invoke WebRequest

Powershell 无法将curl转换为Invoke WebRequest,powershell,curl,Powershell,Curl,我有一个非常有效的curl命令,我正在尝试将其转换为PowerShell调用WebRequest调用 以下是多部分POST数据的工作曲线: curl -X POST "http://domain.com/admin/batchOrder/processBatch" -F "ordersFile=@c:\temp\Sample_Auto_Order_Input_File.xml" -F "psid=3002010250764" -F "recipients[0]=astraljack@

我有一个非常有效的curl命令,我正在尝试将其转换为PowerShell调用WebRequest调用

以下是多部分POST数据的工作曲线:

curl -X POST "http://domain.com/admin/batchOrder/processBatch" 
 -F "ordersFile=@c:\temp\Sample_Auto_Order_Input_File.xml" 
 -F "psid=3002010250764" 
 -F "recipients[0]=astraljack@example.com"
这就是我试图通过调用WebRequest来实现的地方。根据我读到的内容,我需要创建一个名值对的哈希表。我觉得我应该像创建上面的多部分POST数据一样创建哈希表

$form.clear()
$form.Add("ordersFile", "c:\temp\Sample_Auto_Order_Input_File.xml")
$form.Add("psid", "3002010250764")
$form.Add("recipients[0]", "astraljack@example.com")
$form
然后我可以调用WebRequest

Invoke-WebRequest http://domain.com/admin/batchOrder/processBatch -Body $form -Method Post
此操作失败,请求错误为400。要明确的是,我从来没有让这个Invoke-WebRequest工作过,所以我可能在这里偏离了基准。我甚至不确定在哪里可以找到更好的错误消息

如果有帮助,则异常的内容如下

IsMutuallyAuthenticated : False
Cookies                 : {}
Headers                 : {Connection, Transfer-Encoding, Content-Type, Date...}
SupportsHeaders         : True
ContentLength           : -1
ContentEncoding         : 
ContentType             : application/json;charset=UTF-8
CharacterSet            : UTF-8
Server                  : Apache
LastModified            : 5/12/2014 10:23:19 AM
StatusCode              : BadRequest
StatusDescription       : Bad Request
ProtocolVersion         : 1.1
ResponseUri             : http://domain.com/admin/batchOrder/processBatch
Method                  : POST
IsFromCache             : False

解决此问题的最佳方法是下载Fiddler,然后捕获CURL请求。检查其原始请求。然后对invokewebrequest命令执行相同的操作。看看有什么不同,这会告诉您需要调整Invoke WebRequest的哪些方面。

curl中的@filepath语法实际上会将文件内容读取到参数中,但在PowerShell版本中,您只是将ordersFile的值设置为文件名。尝试:

Invoke-WebRequest http://domain.com/admin/batchOrder/processBatch -Body $form -Method Post
$form.clear()
$form.Add("ordersFile", (get-content "c:\temp\Sample_Auto_Order_Input_File.xml"))
$form.Add("psid", "3002010250764")
$form.Add("recipients[0]", "astraljack@example.com")
$form
此外,您可能需要将-ContentType application/x-www-form-urlencoded添加到Invoke-WebRequest调用中。
`我知道这是一个老问题,但我想既然还没有答案,我就拿出我的两分钱。我会这样做:

$form = @{
    'ordersFile' = 'c:\temp\Sample_Auto_Order_Input_File.xml'
    'psid' = '3002010250764'
    'recipients[0]' = 'astraljack@example.com'
}

Invoke-WebRequest -Uri "http://domain.com/admin/batchOrder/processBatch" -Body $form -Method Post