Как написать следующий 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.
CURLOPT_SAFE_UPLOAD
отключает поддержку префикса @
для загрузки файлов в CURLOPT_POSTFIELDS
что именно то, что вам нужно использовать. CURLOPT_POST
ожидает логическое значение ( true
или false
), хотя count($fields)
в вашем случае будет оцениваться как true
. -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);