用于测试API的Curl命令

时间:2011-07-13 17:55:11

标签: api rest curl command-line

我需要测试以下规范的API

URL: http://myapp.com/api/upload/
Method: POST
Parameters: 
   image: (binary data of image)

returns
   a JSON Object

示例php实现来测试api

<?php
$ch = curl_init();
$url = 'http://myapp.com/api/upload/';

$fields = array('image'=>file_get_contents('profile-pic.jpg'));

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_URL, $url);

$json = curl_exec($ch);
echo "\n".$json."\n";

?>

我使用RESTClient和Poster扩展来测试其他api,我不知道如何使用这些工具为名为image的参数发送二进制数据。

如何使用Curl命令测试上述api?

这个没有运气

curl -X POST --data-binary "image=@test.jpg" "http://myapp.com/api/upload/"

test.jpg位于当前目录中。我无法更改第三方API,以便能够使用其他编码格式进行测试。

2 个答案:

答案 0 :(得分:1)

curl -X POST --data-urlencode 'image@test.jpg' 'http://myapp.com/api/upload'

它是image@,而不是image=@

这假设图像数据在发送之前是urlencoded,这就是我认为的PHP代码。

答案 1 :(得分:1)

PHP中带有散列数组的CURLOPT_POSTFIELDS对应于命令行-F选项。因此,它应该类似于:

curl -F image=@profile-pic.jpg http://myapp.com/api/upload/

如果这不是确切的事情,请添加'--trace-ascii dump.txt'以获取记录的完整跟踪并仔细检查以查看错误。