Powershell 无法将curl转换为Invoke WebRequest
我有一个非常有效的curl命令,我正在尝试将其转换为PowerShell调用WebRequest调用 以下是多部分POST数据的工作曲线: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 -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