2013-05-09 1 views
2

Я пытаюсь перевести следующую команду cURL на PHP.Перевод команды cURL на PHP

curl -k https://api.box.com/2.0/files/content -H "Authorization: Bearer 8tuuIMsrf3ShyODVdw" -F [email protected] -F folder_id=0

Вот моя попытка:

$url = 'https://api.box.com/2.0/folders/content'; 
$params['filename'] = '@txt.txt'; 
$params['folder_id'] = '0'; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$this->access_token, "Content-Type: multipart/form")); 
$data = curl_exec($ch); 
curl_close($ch); 

Это не работает, однако. Может ли кто-нибудь помочь мне понять, почему я делаю неправильно, и что я могу сделать, чтобы изменить свой код? Благодаря!!

ответ

2

Попробуйте избавиться от заголовка "Content-Type: multipart/form" от вашего CURLOPT_HTTPHEADER, так как cURL позаботится об этом для вас, основываясь на ваших данных о сообщении.

Поскольку вы загружаете файл, тип содержимого будет автоматически установлен на multipart/form-data, который на самом деле является правильным типом контента, а не multipart/form.

+0

Я попытался сделать это, но у меня все еще возникают проблемы. Единственное, что я не уверен в том, как перевести команду -F cURL на PHP. Из документации cURL -F 'позволяет скручивать эмулировать заполненную форму, в которой пользователь нажал кнопку отправки. Это приводит к зависанию данных POST с использованием многочастных/форм-данных Content-Type в соответствии с RFC 2388'. Я не был уверен, как это интерпретировать, поэтому я просто попытался использовать их в качестве параметров (ключ, значение) в моем запросе POST. Это верно? – user2066880

+0

-F эквивалентен вашему параметру $ params array и CURLOPT_POSTFIELDS. Что такое '$ data'? Сообщение об ошибке или пустое? – drew010

+0

$ Данные пустые. когда я отслеживаю сетевую активность, он говорит, что запрос POST был отправлен без ошибки, но ничего не происходит. – user2066880

2

curl -k небезопасный. Добавьте следующую строку:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

Перевод с немецкого руководства (Обратите внимание, что английская версия отсутствует эту информацию):

Если CURLOPT_SSL_VERIFYPEER деактивирован, опция CURLOPT_SSL_VERIFYHOST должен быть отключен, а ,

Остальная часть вашего кода должна работать нормально.

+0

Хороший улов, но я попытался реализовать это, и мой код все еще не работает. Я думаю, что у меня есть фундаментальная проблема с кодом, который я написал, либо с тем, как я устанавливаю заголовок, либо перевод команды cURL -F на PHP. См. Мой комментарий к другому ответу для получения более подробной информации. – user2066880