Я пытаюсь реконструировать 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
пар.
Я что-то пропустил? Заранее спасибо!
Установите заголовки без кавычек вокруг значения ключей:
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¶2 = знач2&… ‘или как массив с
имя поля в качестве ключа и данные поля в качестве значения. Если значение является массивом,
заголовок Content-Type будет установлен в multipart / form-data
Других решений пока нет …