如何使用 postman 将 cURL 请求刺激到请求

2022-08-30 22:46:42

我正在使用以下cURL请求到本地主机,运行良好:

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"}}

在Postman中,我使用了一个请求,并将以下内容作为标头发送: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();
});

请帮助我纠正这些错误。


答案 1

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

这些步骤适用于Postman的打包应用程序。有关旧版应用的步骤,请查看修订版此答案。

要像在 cURL 命令中那样使用 HTTP 基本身份验证,请单击该选项卡并输入您的凭据。单击将为您添加必要的标题。AuthorizationUpdate RequestAuthorization


Postman's Authorization tab


Postman's Headers tab


要以与使用 cURL 相同的方式提交 JSON 数据,请使用请求,在选项卡下选择,然后按如下方式输入数据:POSTrawBody


Postman's Body tab


为了调试这个,我使用了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,我可以从会话列表中选择它,并使用“原始”检查器查看原始请求:


Fiddler's "raw" inspector


这向我表明 cURL 正在使用 HTTP 基本身份验证和内容发出请求。这种类型的数据通常由键和值组成,例如 。但是,此 cURL 请求提交不带值的键。调用 将产生以下结果:POSTapplication/x-www-form-urlencodedfoo=bar&hoge=fugavar_dump($_POST)


var_dump output


在数据末尾使用 a(如下所示:),将产生以下结果:={"jsonrpc": "2.0", "method": "feed.list", "id": 1}=var_dump


var_dump output


但是,JsonRPC似乎会在您的案例中使用。这将返回随请求一起提交的数据,如果数据以 它结尾,则返回一个 。由于它将尝试将输入数据解析为 JSON 字符串,因此如果字符串以 结尾,它将失败,因为这将是无效的 JSON。file_get_contents('php://input')==

使用Chrome的FoxyProxy扩展程序,我为Fiddler()创建了一个代理配置,这使我能够轻松调试Postman请求发送的数据。使用没有值的键,发送的数据实际上是 ,这将导致 JSON 字符串无效。127.0.0.1:8888POSTx-www-form-urlencodedfoofoo=

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


答案 2

默认情况下,Curl 使用 HTTP 基本身份验证。您在Postman中设置的标题是不同的。尝试在Postman中使用Basic Auth。它位于顶部面板中,您填写用户名和密码,并将生成授权标头。


推荐