Как стимулировать запрос cURL на запрос с помощью postman

я использую следующий запрос 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(
    ModelConfigget('username') => ModelConfigget('api_token')
));

// Get all feeds
$server->register('feed.list', function () {
    return ModelFeedget_all();
});

пожалуйста, помогите мне исправить эти ошибки.

2 ответов


при использовании cURL,-u опции (или --user) используется для предоставления учетных данных для базовая аутентификация http. Это устанавливает Authorization заголовок, содержащий необходимые данные для аутентификации на сервере.

эти шаги относятся к Postman's упакованных приложений. Для шагов для устаревшего приложения, view этой пересмотра этого ответа.

To используйте базовую аутентификацию HTTP, как и в команде cURL, нажмите авторизация tab и введите свои учетные данные. Щелчок Запрос добавить необходимые Authorization заголовок для вас.


Postman's Authorization tab


Postman's Headers tab


чтобы отправить данные JSON так же, как вы сделали с cURL, используйте POST запрос, выберите raw под тело tab, и введите данные следующим образом:


Postman's Body tab


для отладки этого я использовал Саша - бесплатный веб-прокси для отладки.

я использовал керла --proxy возможность заставить его отправлять свои запросы через Fiddler так:

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

теперь, когда запрос проходит через Fiddler, я могу выбрать его из списка сеансов и использовать инспектор" raw", чтобы увидеть raw запрос:


Fiddler's "raw" inspector


это показывает мне, что завиток делает POST запрос с базовой аутентификацией HTTP и application/x-www-form-urlencoded содержание. Этот тип данных обычно состоит из ключей и значений, таких как foo=bar&hoge=fuga. Однако этот запрос cURL отправляет ключ без значения. Вызов var_dump($_POST) даст следующее:


var_dump output


С = в конце данных (вроде так: {"jsonrpc": "2.0", "method": "feed.list", "id": 1}=) the var_dump даст следующее:


var_dump output


однако, похоже, что JsonRPC будет использовать file_get_contents('php://input') в вашем случае. Это возвращает данные, которые были отправлены с запросом, включая =, если данные заканчиваются на этом. Поскольку он попытается проанализировать входные данные как строку JSON, он потерпит неудачу, если строка заканчивается =, потому что это было бы недопустимым JSON.

С помощью FoxyProxy расширение для Chrome, я создал конфигурацию прокси для Fiddler (127.0.0.1:8888), что позволило мне легко отлаживать данные, отправляемые почтальоном POST запрос. Используя x-www-form-urlencoded С ключом foo без значения отправленные данные были фактически foo=, что приведет к недопустимости строки JSON.

однако использование" raw " ввода позволит отправлять указанные данные без = добавляется в конец, таким образом, гарантируя, что данные действительны JSON.


Curl использует базовую аутентификацию HTTP по умолчанию. Ваши заголовки, установленные в Postman, - это что-то другое. Попробуйте использовать Basic Auth в Postman. Он находится в верхней панели, вы заполняете имя пользователя и пароль, и заголовок авторизации будет сгенерирован.