我有一个很好用的curl命令,我试图把它变成PowerShell Invoke-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"
在这里,我试图通过Invoke-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
然后我可以调用Invoke-WebRequest。
Invoke-WebRequest http://domain.com/admin/batchOrder/processBatch -Body $form -Method Post
此操作因 400 Bad Request 而失败。为了清楚起见,我永远不会让这个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
答案 0 :(得分:0)
解决问题的最佳方法是下载Fiddler,然后捕获CURL请求。检查其RAW请求。然后对Invoke-WebRequest命令执行相同操作。看看有什么不同,这应该告诉你使用Invoke-WebRequest调整你需要什么。
答案 1 :(得分:0)
curl中的@filepath语法实际上将文件的内容读入参数,但在PowerShell版本中,您只需将ordersFile的值设置为文件名。尝试:
$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调用中。
`
答案 2 :(得分:0)
我知道这是一个老问题,但我想,因为它仍然没有答案,我会投入我的两分钱。以下是我将如何做到这一点:
$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