Написание следующего скручивания в PHP

Как написать следующий Curl в PHP?

Мне нужно автоматизировать этот процесс в php.

$ curl -F file=@/Users/alunny/index.html -u andrew.lunny@nitobi.com -F 'data={"title":"API V1 App","package":"com.alunny.apiv1","version":"0.1.0","create_method":"file"}' https://build.phonegap.com/api/v1/apps 

Вот ссылка на API сборки Phonegap.

http://docs.build.phonegap.com/en_US/developer_api_write.md.html#_post_https_build_phonegap_com_api_v1_apps

Любая помощь будет принята с благодарностью.

Это то, что я пробовал до сих пор …

 <?php $url = 'https://build.phonegap.com/api/v1/apps'; $file = 'mobilecontainer.zip'; $fields = array( 'title' => 'Test App', 'create_method' => 'file', 'private' => 'false' ); foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } rtrim($fields_string, '&'); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST, count($fields)); curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); curl_setopt($ch,CURLOPT_SAFE_UPLOAD, 'true'); $result = curl_exec($ch); print_r($result); curl_close($ch); 

Вы неправильно используете опции CURL.

  1. CURLOPT_SAFE_UPLOAD отключает поддержку префикса @ для загрузки файлов в CURLOPT_POSTFIELDS что именно то, что вам нужно использовать.
  2. CURLOPT_POST ожидает логическое значение ( true или false ), хотя count($fields) в вашем случае будет оцениваться как true .
  3. -F в команде curl источника принудительно Content-Type значение Content-Type для multipart/form-data . Это означает, что в PHP вы должны передавать данные в CURLOPT_POSTFIELDS как массив. Этот массив должен содержать два элемента: 'data' – данные, кодированные json, и 'file' – ссылка на файл для загрузки.

Поэтому код должен выглядеть так:

 $url = 'https://build.phonegap.com/api/v1/apps'; $data = array( 'title' => 'Test App', 'package' => 'com.alunny.apiv1', 'create_method' => 'file', 'version' => '0.1.0', ); $post = array( 'data' => json_encode($data), 'file' => '@mobilecontainer.zip', ); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS, $post); $result = curl_exec($ch); curl_close($ch); print_r($result);