Как стимулировать запрос 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
заголовок для вас.
чтобы отправить данные JSON так же, как вы сделали с cURL, используйте POST
запрос, выберите raw под тело 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 запрос:
это показывает мне, что завиток делает POST
запрос с базовой аутентификацией HTTP и application/x-www-form-urlencoded
содержание. Этот тип данных обычно состоит из ключей и значений, таких как foo=bar&hoge=fuga
. Однако этот запрос cURL отправляет ключ без значения. Вызов var_dump($_POST)
даст следующее:
С =
в конце данных (вроде так: {"jsonrpc": "2.0", "method": "feed.list", "id": 1}=
) the var_dump
даст следующее:
однако, похоже, что 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. Он находится в верхней панели, вы заполняете имя пользователя и пароль, и заголовок авторизации будет сгенерирован.