如何使用curl发布文件的内容

时间:2013-11-16 02:42:45

标签: http post curl terminal mediawiki

我希望能够将文件的内容发布到MediaWiki网站。到目前为止,我可以这样做:

curl --cookie wikiCookies.txt --negotiate -k -X POST -u:<username> -g 'https://<someWikiSite>/api.php?action=edit&title=TestPage&text=HelloWorld&token=<someToken>&format=json'

这样可以正常工作,但由于网址的长度,它有其局限性。

假设我有一个文件foo.txt,我如何将此文件的内容发布到MediaWiki网站,以便我不必将整个文件内容添加到网址?

我找到了MediaWiki API http://www.mediawiki.org/wiki/API:Edit#Editing_pages,但我无法弄清楚如何用它来卷曲POST整个文件内容。

我认为这对于对卷曲有很好理解的人来说应该是一个相当简单的问题,但无论我尝试什么,我都无法让它发挥作用。

2 个答案:

答案 0 :(得分:1)

试试这个:

--data "text=<some_wiki_tag>this is encoded wiki content</some_wiki_tag>&title=TestPage&text=HelloWorld&token=<someToken>&format=json"

答案 1 :(得分:0)

我认为您需要的是-d, --data <data>

如果<data>@开头,那么其余部分应该是一个文件名,其内容将在POST请求中发送。

在线卷曲manpage

  

-d, - data

     

(HTTP)将POST请求中的指定数据发送到HTTP服务器,   与用户填写HTML时浏览器的操作方式相同   表单并按下提交按钮。这将导致卷曲通过   使用content-type将数据发送到服务器   应用程序/ x-WWW窗体-urlencoded。比较-F, - form。

     

-d, - data与--data-ascii相同。要纯数据二进制发布数据,您应该使用--data-binary选项。对URL进行URL编码   您可以使用的表单字段的值--data-urlencode。

     

如果在同一命令中多次使用这些选项中的任何一个   在行中,指定的数据将与a合并在一起   分离&amp; -symbol。因此,使用'-d name = daniel -d skill = lousy'会   生成一个看起来像'name = daniel&amp; skill = lousy'的帖子块。

     

如果用字母@开始数据,其余的应该是一个文件   用于读取数据的名称,或者 - 如果您希望curl读取数据   来自stdin。该文件的内容必须已经过URL编码。   也可以指定多个文件。从名为的文件中发布数据   因此,'foobar'将使用--data @foobar完成。当--data被告知   从这样的文件读取,回车和换行将是   剥离了。