【问题标题】:Uploading zip file works in curl, but not in Powershell - why?上传 zip 文件在 curl 中有效,但在 Powershell 中无效 - 为什么?
【发布时间】:2012-02-07 12:20:00
【问题描述】:

我正在从常规文件切换到 zip 文件进行上传,并被告知我需要使用这种格式的标题 - Content-Type: application/zip。

所以,我可以通过 curl 正确上传文件:

curl --verbose --header "Content-Type: application/zip" --data-binary @C:\Junk\test.zip "http://client.xyz.com/submit?username=test@test.com&password=testpassword&job=test"

但是,当我编写一个简单的 powershell 脚本来做同样的事情时,我遇到了问题——数据没有加载。我不知道如何返回一个好的错误消息,所以我不知道细节,但底线是数据没有进入。

$FullFileName = "C:\Junk\test.zip"
$wc = new-object System.Net.WebClient -Verbose
$wc.Headers.Add("Content-Type: application/zip")
$URL = "http://client.xyz.com/submit?username=test@test.com&password=testpassword&job=test"
$wc.UploadFile( $URL, $FullFileName ) 
# $wc.UploadData( $URL, $FullFileName ) 

我尝试使用 UploadData 而不是 UploadFile,但这似乎也不起作用。

谢谢, 西尔维娅

【问题讨论】:

  • 谢谢安迪 - 我确实使用 powershell 进行了简单的文件上传,但是当我从 csv 切换到 zip 文件时它停止工作。即使在 curl 中执行等效操作时,即使使用 csv 文件,我也需要 --data-binary 开关。

标签: powershell curl


【解决方案1】:

我不一定有解决方案,但我认为问题在于您正在尝试使用 WebClient 对象上传二进制文件。您很可能需要 UploadData 方法,但我认为您必须将 zip 文件运行到要上传的字节数组中。我不确定我的头顶。

如果您还没有,请务必查看此类和方法的 MSDS 文档:http://msdn.microsoft.com/en-us/library/system.net.webclient_methods.aspx

【讨论】:

  • 查看我链接的 SO 问题。
  • 这就是解决方案。 UploadFile 将数据作为表单发布,与 cURL 发布数据不同。 UploadData 在发布数据时的操作更像 cURL。
【解决方案2】:

现在我再次查看它,我认为您需要:$wc.Headers.Add("Content-Type", "application/zip"),因为集合是 key/value paired。看看这个 SO 问题:

WebClient set headers

此外,如果您仍然遇到问题,您可能需要添加用户代理标头。我认为 curl 有它自己的。

$userAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;)"
$wc.Headers.Add("user-agent", $userAgent)

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2020-05-17
    • 2020-03-24
    • 2018-04-01
    • 2019-11-27
    • 1970-01-01
    相关资源
    最近更新 更多