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

标签 php curl

我正在对运行良好的本地主机使用以下 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 请求并将以下内容作为 header 发送:

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 option (或 --user)用于为 HTTP Basic authentication 提供凭证.这会将 Authorization header 设置为包含 necessary data向服务器进行身份验证。

这些步骤适用于 Postman 的 packaged app .有关旧版应用程序的步骤,请查看 this修改这个答案。

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


Postman's Authorization tab


Postman's Headers tab


要以与使用 cURL 相同的方式提交 JSON 数据,请使用 POST 请求,在 Body 选项卡下选择 raw ,然后像这样输入您的数据:


Postman's Body tab


为了调试这个,我使用了 Fiddler - 免费的网络调试代理。

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

curl \
--proxy http://localhost:8888 \
-u foo:bar \
-d "{\"jsonrpc\": \"2.0\", \"method\": \"feed.list\", \"id\": 1}" \
http://localhost

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


Fiddler's "raw" inspector


这向我展示了 cURL 正在使用 HTTP 基本身份验证和 application/x-www-form-urlencoded 内容发出 POST 请求。这种类型的数据通常由键和值组成,例如 foo=bar&hoge=fuga。但是,此 cURL 请求提交的是一个没有值的键。调用 var_dump($_POST) 将产生以下结果:


var_dump output


数据末尾有一个=(像这样:{"jsonrpc": "2.0", "method": "feed.list", "id": 1 }=) var_dump 将产生以下内容:


var_dump output


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

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

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

关于php - 如何使用 postman 将 cURL 请求刺激到请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28529379/

相关文章:

php - Joomla 模板调整模块位置

php - 从外部网站获取 DIV 内容

php - 无法让 Beanstalkd 队列为 PHP 工作

java - 使用 curl 发布 POST 时获取 HTTP 404 Not Found

java - 将变量传递给java进程

javascript - 使用nodejs服务器读取并打印文件内容?

php - 检查 WooCommerce 购物车页面上是否启用了特定运输方式

curl - 使用 GoLang 通过curl 发送多部分请求

javascript - ASP.NET 自动提交问题

php - Yii-Active Record 以字符串形式返回特定列的平均结果