如何使用邮递员刺激cURL请求

Fsh*_*mri 13 php curl

我正在使用以下cURL请求localhost运行正常:

curl -u admin:e4d4face52f2e3dc22b43b2145ed7c58ce66e26b384d73592c -d "{\"jsonrpc\": \"2.0\", \"method\": \"feed.list\", \"id\": 1}" http://localhost/minifluxR/jsonrpc.php
Run Code Online (Sandbox Code Playgroud)

但是当我使用Postman而不是cURL发送相同的请求时,我得到:

{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse error"}}
Run Code Online (Sandbox Code Playgroud)

在Postman中我使用了一个GET请求并将以下内容作为标题发送:

url:http://localhost/minifluxR/jsonrpc.php
username:admin
api_token:e4d4face52f2e3dc22b43b2145ed7c58ce66e26b384d73592c
method: feed.list
Run Code Online (Sandbox Code Playgroud)

以下是我试图触发的PHP函数:

$server = new Server;

$server->authentication(array(
    \Model\Config\get('username') => \Model\Config\get('api_token')
));

// Get all feeds
$server->register('feed.list', function () {
    return Model\Feed\get_all();
});
Run Code Online (Sandbox Code Playgroud)

请帮我纠正这些错误.

Spo*_*oky 36

使用cURL时,-u 选项(或--user)用于提供HTTP基本身份验证的凭据.这会将Authorization标头设置为包含与服务器进行身份验证所需的数据.

这些步骤适用于Postman的打包应用程序.对于传统应用程序的步骤,查看这个修订的这个答案.

要像在cURL命令中一样使用HTTP基本身份验证,请单击Authorization选项卡并输入您的凭据.单击Update Request将为您添加必要的Authorization标题.


邮递员的授权标签


邮差的标题选项卡


要以与使用cURL相同的方式提交JSON数据,请使用POST请求,rawBody选项卡下选择,然后输入您的数据,如下所示:


邮差的身体标签


为了调试这个,我使用了Fiddler - 一个免费的Web调试代理.

我使用cURL的--proxy选项让它通过Fiddler发送请求,如下所示:

curl \
--proxy http://localhost:8888 \
-u foo:bar \
-d "{\"jsonrpc\": \"2.0\", \"method\": \"feed.list\", \"id\": 1}" \
http://localhost
Run Code Online (Sandbox Code Playgroud)

现在请求通过Fiddler,我可以从会话列表中选择它,并使用"原始"检查器查看原始请求:


提琴手的


这告诉我cURL正在POST使用HTTP Basic身份验证和application/x-www-form-urlencoded内容发出请求.这种类型的数据通常由键和值组成,例如foo=bar&hoge=fuga.但是,此cURL请求正在提交没有值的密钥.致电var_dump($_POST)将产生以下结果:


var_dump输出


=在数据的末尾(像这样:{"jsonrpc": "2.0", "method": "feed.list", "id": 1}=)的var_dump会产生以下


var_dump输出


但是,似乎JsonRPC将file_get_contents('php://input')在您的情况下使用.这将返回随请求一起提交的数据,包括a =,如果数据以此结束.因为它会尝试将输入数据解析为JSON字符串,所以如果字符串以a结尾,它将失败=,因为这将是无效的JSON.

使用Chrome 的FoxyProxy扩展,我为Fiddler(127.0.0.1:8888)创建了一个代理配置,这使我可以轻松调试Postman POST请求发送的数据.使用没有值x-www-form-urlencoded的键,foo实际发送的数据foo=,这将导致您的JSON字符串无效.

但是,使用"原始"输入将允许发送指定的数据而不将=其添加到其末尾,从而确保数据是有效的JSON.