JSON POST Пусто с помощью команды cURL - PullRequest
1 голос
/ 28 января 2020

У меня есть вызов cURL в скрипте PHP 7.2, запущенном в CentOS 7, который передает пустые данные в конечную точку. При диагностике проблемы я попытался воспроизвести проблему, используя cURL в командной строке, а не код PHP. Вот команда, которую я выполняю (мне сказали отправить Content-Length 0):

/usr/bin/curl -H "App-Key: 321321321313" -H "App-Token: 321321321312" -H "Content-Length: 0" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"reportCustomFields":[{"label":"THIS","value":"THAT","shown":true},{"label":"UP","value":"DOWN","shown":true}]}' "https://url.here/endpoint_debug.php"

В сценарии конечной точки я печатаю поток ввода.

$data = file_get_contents('php://input');

print "HEADERS:\n\n";
print_r(apache_request_headers()) . "\n\n";

print "RAW Data:\n\n";
print "'" . $data . "'\n\n";

Независимо от того, что я сделал, переменная $data всегда пуста. Результат, который я вижу, всегда «». Я также попытался отправить его на https://webhook.site/, и это также показывает, что «значения формы» пусты.

Я пробовал с -X POST и без. Я попытался изменить порядок вызовов, чтобы URL был перед переключателем data (-d). Я также попробовал --data.

В чем может быть проблема? Я повторил это на 2 разных серверах, вызывающих одну и ту же конечную точку. Другой код в том же проекте правильно обрабатывает file_get_contents('php://input'), так что я не думаю, что это все.

Будем благодарны за любые указания!

1 Ответ

1 голос
/ 28 января 2020

TLDR: вам нужно удалить -H "Content-Length: 0"

Не имеет смысла, почему вас попросили отправить это, если вы хотите получить ответ.

Я попробовал вашу команду без изменений с URL webhook.site, и она может вернуть тело контента (например) без отправки заголовка и ничего не вернуть, если отправляет заголовок:

Проще говоря, эта команда:

/usr/bin/curl -H "App-Key: 321321321313" -H "App-Token: 321321321312" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"reportCustomFields":[{"label":"THIS","value":"THAT","shown":true},{"label":"UP","value":"DOWN","shown":true}]}' 'https://webhook.site/27f6128e-2f82-4157-99da-99464f22122f'

Возвращает тело. Принимая во внимание, что эта команда:

/usr/bin/curl -H "Content-Length: 0" -H "App-Key: 321321321313" -H "App-Token: 321321321312" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"reportCustomFields":[{"label":"THIS","value":"THAT","shown":true},{"label":"UP","value":"DOWN","shown":true}]}' 'https://webhook.site/27f6128e-2f82-4157-99da-99464f22122f' 

Очевидно, ничего не возвращает

Заголовки ответа сервера указывают столько же:

> Accept: application/json
> Content-Type: application/json
> <strong>Content-Length: 0</strong>
> 
* upload completely sent off: 112 out of 112 bytes
< HTTP/1.1 200 OK
< Server: nginx/1.14.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...