0

我正在尝试将存档文件(如果重要,则为 Zip 存档)上传到外部站点的现有 API,虽然我可以让 Web 客户端连接并获取到该站点的令牌,但上传似乎永远无法正常工作,但我不断得到404 错误。问题可能在他们这边,但我似乎是唯一一个在他们的网站上发布过它的人,但我想知道我是否正确使用 UploadFile,或者是否有办法从命令中捕获响应,我想知道是否只是为了改进我的 PowerShell 编码。

我正在运行的是以下内容:

# Variables I want to use
$appArchive = "\\networkpath\Releases\CodeReleasePackage.zip"
$localArchive = "c:\temp\CodeReleasePackage.zip"
[string]$appUrl = "https://site.com/api/v1/apps/(id)/"
[string]$tokenUrl = "https://site.com/token"
[string]$uploadUrl = "https://site.com/api/v1/apps/(id)/?auth_token=$mytoken"
# $appCred = Get-Credential
$username = "email@address"
$password = "password"
# Create the web client
"Creating the client.`n"
$pgup = new-object System.Net.WebClient
$pgup.Credentials = New-Object net.NetworkCredential($username,$password)
"Going to the token page"
$pgToken = $pgup.UploadString($tokenUrl,"")
$mytoken = $pgToken -replace '{|}|"|:|token',''
"Now trying to upload the latest file with my token: $mytoken"
$pgup.UploadFile($uploadUrl,$appArchive)

我得到类似于 {"token","hkjuihgkjhiuhhlkhuhk"} 的令牌并且不知道是否有更好的方法来处理生成的令牌我做了替换以摆脱除令牌字符串之外的所有内容。将其添加到 URL 应该可以工作,但根据 Fiddler,我只会收到 404 错误。

因此,当我运行 $pgup.UploadFile() 时,我希望能够捕获来自站点的响应,但是当我这样做时,似乎什么都没有回来,有没有一种特殊的方法来捕获它?我找不到一个明确的例子,当我做类似 $response = $pgup.UploadFile() 的事情时,我在 $response 中什么都没有。任何对诊断 webclient 错误有用的东西都会很棒,我想了解更多关于这方面的信息,因为它看起来非常有用

4

2 回答 2

2

我不确定这是否是您要寻找的,但是这里有一些代码,我用来将 zip 文件上传到服务器。

$File = "yourfile.zip" #File to be uploaded
$ftp = "ftp://yourserver/directory #Location for the zip file to be uploaded


$webclient = New-Object System.Net.WebClient
$uri = New-Object System.Uri($ftp)
$webclient.Credentials =  Get-Credential #Will prompt for user info. You can use your above way to gather credentials as well
$webclient.UploadFile($uri,$File)

如您所见,它相当简短,几乎与您的代码相同,但不处理令牌。

于 2012-05-25T21:54:46.417 回答
0

看起来我无法使用 PowerShell 作为驱动程序访问该站点,由于某种原因,我永远无法进行上传,但我可以阅读该站点上的页面并实际获得我的帐户的响应。可能是他们的 API 不喜欢 PowerShell 运行连接的方式,尽管我无法从 PhoneGap 确认任何内容,因为他们还没有回应我的问题。

已编辑:2012 年 6 月 14 日 失败的全部原因是他们这边的 Apache 实现不接受 WebClient 发送的 HTTP 1.1 请求。如果我能回到 HTTP 1.0 那么他们说我应该能够完成这个。或者我可以等待 OAUTH 2.0 实施,然后从那里开始。

于 2012-06-01T15:00:57.617 回答