Как я могу воссоздать эту команду curl в php?

Я пытаюсь реконструировать API из-за отсутствия документации от нашего поставщика программного обеспечения, и мне нужно заново создать команду curl в php. Рассматриваемая команда:

curl -v -X POST -H Accept-Encoding:"gzip" -H deviceId:"someID" -H appBuildDate:"2014-12-11 15:56:52 +0000" -H systemName:"iPhone OS" -H appBuildNumber:"44" -H platform:"iPhone5,2" -H Content-Type:"application/xml" -H model:"iPhone" -H name:"iphone" -H systemVersion:"8.1.2" -H Authorization:"Token someToken" -H appVersion:"6.8" https://soemsub.somedomain.com/ws/orders/search -d "<orderSearch><consigneeSearch /><customerSearch /><shipperSearch scheduledArrivalEarly=\"12/17/2014\" /></orderSearch>"

Единственная проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, какие опции установить для -d команда.

Я поставил CURLOPT_POST в true а также CURLOPT_POSTFIELDS с помощью:

$query = "<orderSearch><consigneeSearch /><customerSearch /><shipperSearch scheduledArrivalEarly=\"$date\" /></orderSearch>";
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $query);

Я также попробовал:

curl_setopt($this->curl, CURLOPT_POSTFIELDS, array($query));

И я не получаю действительные ответы. Есть ли хитрость в том, чтобы правильно это опубликовать? Команда, которую я обрисовал в верхней части, записана как есть в файле журнала (кроме идентификатора устройства и авторизации), но я не уверен, смогу ли я указать пост без «имени» поста, как я сделал бы в форме HTML , Из того, что я могу сказать, мне нужно иметь key=>value пар.

Я что-то пропустил? Заранее спасибо!

1

Решение

Установите заголовки без кавычек вокруг значения ключей:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization:Token someToken',
'deviceId:someID',
// ... all the other headers
));

Вместо:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization:"Token someToken"',
'deviceId:"someID"',
// ... all the other headers
));

Если вы используете POSTFIELDS со строковым телом, вам нужно urlencode его:

$query = "<orderSearch><consigneeSearch /><customerSearch /><shipperSearch scheduledArrivalEarly=\"$date\" /></orderSearch>";
curl_setopt($this->curl, CURLOPT_POSTFIELDS, urlencode($query));

Смотрите этот другой вопрос: Должен ли я URL-кодировать данные POST?

Полные данные для публикации в HTTP-операции «POST». Чтобы опубликовать файл,
добавьте @ к имени файла и используйте полный путь. Тип файла может быть
явно указано после имени файла с типом в
формат ‘; тип = mimetype’. Этот параметр может быть передан как
строка в кодировке urlen, например ‘para1 = val1&para2 = знач2&… ‘или как массив с
имя поля в качестве ключа и данные поля в качестве значения. Если значение является массивом,
заголовок Content-Type будет установлен в multipart / form-data

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]