【问题标题】:cURL not sending POST data, but works properly in terminalcURL 不发送 POST 数据,但在终端中正常工作
【发布时间】:2012-06-28 22:32:53
【问题描述】:

这是在命令行中工作的 curl 代码:

  $ curl -F file=@/path/to/index.html -u lslkdfmkls@gmail.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

这是我的代码:

$ch = curl_init();

$data = array("title"=>"sampele title","package"=>"com.fsdlfn.sdfknsdj","version"=>"0.1.0","create_method"=>"file","file"=>"@/path/myfolder/myfile.zip");

$jsdata = json_encode($data);

curl_setopt($ch, CURLOPT_URL, 'https://build.phonegap.com/api/v1/app?auth_token='.$token); //got this token already, so using that here .
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsdata);

echo curl_exec($ch);

curl命令在终端运行,但是上面的curl命令是用php写的,返回错误:

{"error":"no create_method specified: file, remote_repo, or hosted_repo"}

有什么解决办法?

谢谢

【问题讨论】:

    标签: php cordova curl


    【解决方案1】:

    试试这个:

    $ch = curl_init();
    
    $data = array("title"=>"sampele title","package"=>"com.fsdlfn.sdfknsdj","version"=>"0.1.0","create_method"=>"file");
    
    $jsdata = json_encode($data);
    
    curl_setopt($ch, CURLOPT_URL, 'https://build.phonegap.com/api/v1/app?auth_token='.$token); //got this token already, so using that here .
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('data' => $jsdata, 'file'=>'@/path/myfolder/myfile.zip'));
    
    echo curl_exec($ch);
    

    这就是我进行修复的原因:

    1. $datajson_encoded,所以 cURL 不会看到 file 属性,它将作为字符串发送,而不是读取文件 - 这就是我将 file 直接放在 POSTFIELDS 中的原因
    2. 变量$data 不会导致它作为data=... 发送,而是单个字符串(如POSTing XML)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 2023-04-06
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      相关资源
      最近更新 更多