如何使curl POST一个参数,从文件中读取它的值?

时间:2014-01-02 16:38:06

标签: http curl

我正在玩GitHub web hooks,我想使用curl发布一些示例JSON。该请求应包含payload POST参数,并将JSON字符串作为值。例如,这有效:

$ curl --form payload='{"foo":1}' http://somewhere

但我需要从文件中读取JSON(比如说foo.json)。用@foo.json替换JSON字符串会在请求正文中发布有效负载:

--------------------------8d0c6d3f9cc7da97
Content-Disposition: form-data; name="payload"; filename="foo.json"
Content-Type: application/octet-stream

{'foo':1}

--------------------------8d0c6d3f9cc7da97--

这不是我想要的,我需要将有效负载作为参数传递。我该怎么做?

2 个答案:

答案 0 :(得分:1)

也许很傻但试试这个:

cat foo.json | xargs -I % curl --form payload='%' http://example.com

刚刚写了这个小东西,它起作用了:

var=`cat some.json` && curl --form payload="$var" http://lvh.me/test/index.php

答案 1 :(得分:0)

这是另一种Perl测试脚本。将目标URL作为第一个参数传递,将JSON提供给STDIN:

#!/usr/bin/env perl

use strict;
use warnings;
use LWP;

my $target = shift @ARGV or die "Need a target URL";
my $ua = LWP::UserAgent->new;
my $payload = do { local $/; <STDIN> };
my $response = $ua->post($target, { payload => $payload });
print $response->as_string;