Raphellhare API与PowerShell

时间:2012-09-03 17:26:28

标签: .net powershell rapidshare

$FreeUploadServer = Invoke-RestMethod -Uri "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver"
Invoke-RestMethod -Uri "http://rs$FreeUploadServer.rapidshare.com/cgi-bin/rsapi.cgi?sub=upload&login=43533592&password=password&filecontent=C:\libs\test.txt" 

我不知道为什么它不起作用,它与filecontent参数有关但我已阅读有关API的整个文档,我无法弄明白。

API Documentation

2 个答案:

答案 0 :(得分:4)

确保在第二个Invoke-RestMethod调用中使用-Method Post参数/ arg组合。另外,请看一下这个SO response to a similar question about using CURL。查看问题和答案后,似乎RapidShare需要填写POST表单字段。在这种情况下,您需要指定-Body参数。我想你将使用PowerShell散列表,其中每个条目对应一个表单字段名称/值对。看起来所需的一个字段是filecontent字段。大概是值是文件的内容。

此外,当您使用POST时,您必须将GET查询参数转换为POST表单字段,例如:

$url = "http://rs$FreeUploadServer.rapidshare.com/cgi-bin/rsapi.cgi"
$fields = @{sub='upload';login='43533592';password='password';filename='test.txt';
            filecontent=([IO.File]::ReadAllText('c:\libs\test.txt'))}

Invoke-RestMethod -Uri $url -Body $fields -Method Post

如果[IO.File]::ReadAlltext()没有删除它,可以尝试[IO.File]::ReadAllBytes()

答案 1 :(得分:0)

事实证明,API文档中有一小部分说明如果使用POST方法,则所有参数都需要在正文中传递。我写了一个函数,在PowerShell中上传到RapidShare,我希望这有助于未来的人们因为这非常烦人。

function Upload-RapidShare([string]$File,[string]$Name)
{
     $FreeUploadServer = Invoke-RestMethod -Uri "http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver"
     Invoke-RestMethod "http://rs$FreeUploadServer.rapidshare.com/cgi-bin/rsapi.cgi" -Body  "sub=upload&login=USERNAME&password=PASSWORD&filename=$Name&filecontent=$File" -Method Post
}