使用CURL发布文件的内容


15

(以下为背景故事,如果您愿意,可以跳至“问题:”)

我的其中一门课程有一个网页,该网页接受输入文本(预期为Python代码),然后给出一些标记化的响应。它旨在用作我们正在编写的Python词法分析器的参考。我正在尝试使测试过程自动化,并且能够在不打开浏览器,来回复制文本等情况下检查我的代码。因此,这是我正在尝试做的事情:

我有一个名为“ x.py”的示例python文件,我想将其发布到服务器,就像我填写该表格一样。我试过了:

curl --data-urlencode "file=@x.py" http://matt.might.net/apps/pylex/pylex.php

但是不幸的是,这行不通,因为显然"@x.py"是作为我的文件内容发布的(也就是说"file=@x.py",不是发布的内容"file=<contents-of-x.py>")。我已经尝试过了--form--data但是那些都没有用。

问题: 具体来说,如果我有一个包含未经URL编码的内容的文件,并且该文件的内容需要是POST的一部分并与特定名称相关联(在本例中为file),那么实现此目的的正确方法是什么? ?



为什么不将其发布为答案?您可以回答自己的问题,然后在2天内左右(不确定多长时间)就可以接受它。
BenjiWiebe 2013年

@BenjiWiebe:好的,我将其发布。
2013年

Answers:


25

您想要的是"file@x.py"(否=)。

curl 联机帮助页

name @ filename这将使curl从给定的文件中加载数据(包括任何换行符),对该数据进行URL编码并在POST中传递。名称部分附加了等号,从而导致name = urlencoded-file-content。请注意,该名称应该已经过URL编码。


2

我将把qmega的答案保留为可接受的答案,但我也会在这里的评论中留下我留下的答案,以便于阅读。另一种方法是通过指定"file=`cat x.py`"。对于完整的命令,它将是:

curl --data-urlencode "file=`cat x.py`" http://matt.might.net/apps/pylex/pylex.php
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.