我正在使用以下cURL请求到运行正常的localhost:
curl -u admin:e4d4face52f2e3dc22b43b2145ed7c58ce66e26b384d73592c -d "{\"jsonrpc\": \"2.0\", \"method\": \"feed.list\", \"id\": 1}" http://localhost/minifluxR/jsonrpc.php
但是,当我使用Postman而不是cURL发送相同的请求时,我得到了:
{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse error"}}
在邮递员中,我使用了一个GET
请求并将以下内容作为标题发送:
url:http://localhost/minifluxR/jsonrpc.php
username:admin
api_token:e4d4face52f2e3dc22b43b2145ed7c58ce66e26b384d73592c
method: feed.list
以下是我尝试触发的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();
});
请帮助我纠正这些错误。
使用cURL时,-u
选项(或--user
)用于提供HTTP Basic身份验证的凭据。这会将Authorization
标头设置为包含必要的数据,以便与服务器进行身份验证。
这些步骤适用于Postman的打包应用程序。对于传统应用程序的步骤,查看这个修订的这个答案。
要像在cURL命令中一样使用HTTP Basic身份验证,请单击Authorization选项卡并输入凭据。单击Update Request将为您添加必要的Authorization
标题。
要以与使用cURL相同的方式提交JSON数据,请使用POST
请求,raw在Body标签下选择,然后输入数据,如下所示:
为了调试它,我使用了Fiddler-一个免费的Web调试代理。
我使用了cURL的--proxy
选项,使其通过Fiddler发送其请求,如下所示:
curl \
--proxy http://localhost:8888 \
-u foo:bar \
-d "{\"jsonrpc\": \"2.0\", \"method\": \"feed.list\", \"id\": 1}" \
http://localhost
现在,请求已通过Fiddler,我可以从会话列表中选择它,然后使用“原始”检查器查看原始请求:
这表明cURL正在POST
使用HTTP Basic身份验证和application/x-www-form-urlencoded
内容发出请求。这种类型的数据通常由键和值组成,例如foo=bar&hoge=fuga
。但是,此cURL请求正在提交没有值的密钥。呼叫var_dump($_POST)
将产生以下结果:
=
数据的末尾带有a (例如:){"jsonrpc": "2.0", "method": "feed.list", "id": 1}=
,var_dump
将产生以下结果:
但是,看来JsonRPC将file_get_contents('php://input')
在您的情况下使用。这将返回与请求一起提交=
的数据,如果数据以请求结尾,则包括。因为它将尝试将输入数据解析为JSON字符串,所以如果字符串以结束,它将失败=
,因为那将是无效的JSON。
使用适用于Chrome的FoxyProxy扩展,我为Fiddler(127.0.0.1:8888
)创建了代理配置,使我能够轻松调试PostmanPOST
请求发送的数据。与无值x-www-form-urlencoded
的键foo
一起使用时,发送的数据实际上是foo=
,这将导致您的JSON字符串无效。
但是,使用“原始”输入将允许发送指定的数据而无需将=
其添加到其末尾,从而确保数据是有效的JSON。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句