2015-09-12 3 views
0

Мне нужно отправлять переменные в API веб-сайта с использованием формата JSON. После некоторых исследований и с помощью теста почтового сервера, я придумал эту строку:Как опубликовать переменные с curl в JSON

curl -H "Content-Type: application/json" -X POST -d '{"id":"value"}' http://posttestserver.com/post.php 

Successfully dumped 0 post variables. 
View it at http://www.posttestserver.com/data/2015/09/12/09.46.20574590076 
Post body was 12 chars long. 

Однако переменные не обрабатывается из строки (она должна найти переменный «идентификатор» в данном случае). Вместо этого все помещается в тело сообщения.

полный запрос пост можно увидеть по этому адресу:

Time: Sat, 12 Sep 15 09:46:20 -0700 
Source ip: 178.112.221.72 

Headers (Some may be inserted by server) 
HTTP_CONNECTION = close 
REQUEST_URI = /post.php 
QUERY_STRING = 
REQUEST_METHOD = POST 
GATEWAY_INTERFACE = CGI/1.1 
REMOTE_PORT = 53709 
REMOTE_ADDR = 178.112.221.72 
CONTENT_LENGTH = 12 
CONTENT_TYPE = application/json 
HTTP_ACCEPT = */* 
HTTP_USER_AGENT = curl/7.43.0 
HTTP_HOST = posttestserver.com 
UNIQUE_ID = VfRW3NBx6hIAAHNyJToAAAAK 
REQUEST_TIME_FLOAT = 1442076380.6991 
REQUEST_TIME = 1442076380 

No Post Params. 

== Begin post body == 
'{id:value}' 
== End post body == 

Upload contains PUT data: 
'{id:value}' 

Здесь данные появляются как в «пост» тела и под PUT. Но опять же никаких параметров сообщения не указаны.

Я что-то не так? Можно ли вообще публиковать переменные с помощью JSON (как вы могли бы использовать id=value&id2=value2 с application/x-www-form-urlencoded)?

PS Я нашел аналогичный пост (how to post with curl to REST/JSON service?), там это зависит от сервера. Но в моем случае, используя тестовый сервер, я должен видеть фактический «сырой» запрос (цитирую posttestserver.com

«Таким образом, я соединил простой сервис, который будет выгрузить содержимое из * HTTP POST в файл, который можно просмотреть на досуге ».

).

ответ

1

Вы заметите, что это действительно показывало ваши данные в разделе Post Body. Когда вы отправляете через CURL с помощью приложения/json, он просто передает этот JSON в тело. Если бы он был x-www-form-urlencoded, он бы сериализовал его в формате, который PHP может изначально понять, например: id=value. Похоже, он работает по назначению, просто сервер не понимает JSON.

Если вы хотите, чтобы данный сервис, чтобы понять ваше содержание должным образом, вам необходимо сериализовать его к чему-то стандартному формату x-www-form-urlencoded делая просто -d "id=value"

+0

Спасибо за ваш ответ. Это похоже на ответ на вопрос: «Можно ли вообще публиковать переменные с помощью JSON?» не будет, по крайней мере, не так, как я думал, это будет (в основном, как альтернатива синтаксису url-encode). Но тогда, если служба, которую мне нужно использовать явно, требует JSON, это означает, что я должен быть в порядке с указанным выше кодом ... – m2oTech

+0

Да. Это определенно возможно, но служба должна быть настроена на прием данных JSON, это в основном суть этого. – CollinD

Смежные вопросы