【问题标题】:How to stimulate cURL request to a request using postman如何使用邮递员将 cURL 请求激发为请求
【发布时间】:2016-05-22 20:21:50
【问题描述】:

我正在使用以下运行良好的本地主机 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();
});

请帮我纠正这些错误。

【问题讨论】:

    标签: php curl


    【解决方案1】:

    使用 cURL 时,-uoption(或--user)用于为HTTP Basic authentication 提供凭据。这会将Authorization 标头设置为包含necessary data 以向服务器进行身份验证。

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

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




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



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

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

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

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



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



    在数据末尾带有=(如下所示:{"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) 创建了一个代理配置,这使我能够轻松调试 Postman 的 POST 请求发送的数据。使用x-www-form-urlencoded,键为foo,没有值,发送的数据实际上是foo=,这会导致你的JSON字符串无效。

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

    【讨论】:

    • @user2198400 我已经更新了我的答案,以回应您关于使用“原始”数据的查询。我不知道做 UTF-8 响应。您可能应该为此提出一个新问题。
    • pam 认证呢?我正在尝试模拟以下 curl 命令:``` curl --no-check-certificate localhost:8000/login \ -d username=myusername \ -d password=mypassword \ -d eauth='pam' ``` 我已经添加它们作为参数但不工作
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2017-06-17
      • 2020-11-15
      • 2022-10-18
      相关资源
      最近更新 更多