PowerShell等效于cURL命令上传文件

时间:2013-04-22 00:21:17

标签: windows post powershell curl http-post

我可以使用以下cURL命令将HTTP POST文本文件发送到我的服务器:

curl -i -F file=@file.txt http://www.website.com/put_file

服务器需要来自$ _FILES ['file']的文件。

到目前为止,我有以下内容,但它无效:

$url = http://www.website.com/put_file
$file = "c:\file.txt"
$wc = new-object System.Net.WebClient
$wc.UploadFile($url, $file.FullName)

它返回0,并且没有上传到服务器

如何将文件作为$ _FILES ['file']发送?另外,如何从服务器上看到响应?

4 个答案:

答案 0 :(得分:8)

我认为它应该是这样的:

$body = "file=$(get-content file.txt -raw)"
Invoke-RestMethod -uri http://www.websetite.com/put_file -method POST -body $body

注意:这确实需要PowerShell V3。此外,您可能需要将-ContentType参数指定为"application/x-www-form-urlencoded"。我建议获取Fiddler2并使用它来检查curl和Inovke-RestMethod案例中的请求,以帮助获得正确的irm参数。这假设文件内容相当小且非二进制。如果没有,您可能需要转到内容类型multipart / form-data。

答案 1 :(得分:3)

在Powershell中,您可以使用curl.exe代替curl(是的,是不同的命令:http://get-cmd.com/?p=5181

curl.exe -i -F file=@file.txt http://www.website.com/put_file

或者您可以在Powershell 3中使用Invoke-RestMethod

有关Powershell 3中Invoke-RestMethod的更多详细信息,位于https://superuser.com/questions/344927/powershell-equivalent-of-curl

答案 2 :(得分:0)

要解决这个问题,我下载curl.exe for windows,仍然使用curl。

答案 3 :(得分:-1)

在使用小提琴手试图匹配卷曲几个小时后,我放弃了,只是使用了这个家伙的功能(见下面的链接)。工作就像一个魅力。

http://blog.majcica.com/2016/01/13/powershell-tips-and-tricks-multipartform-data-requests/