リモートサーバーにcURLを使用してファイルをアップロードする際に問題があります。 リモートサーバは、POST変数が順番に来る場合にのみファイルを受け入れます。 私の場合:sid、cmd、uploadfile シンプルなHTMLアップロードフォームをこの順番でテストしましたが、すべて正常です。しかし、入力フィールドの順序を入れ替えると:cmd、sid、uploadfile アップロードが拒否されます。PHP Curlアップロード、配列に設定された順番で値を投稿
私のcURLコードはここにあります。配列に設定した順序で変数を送信しません。 変数を設定したのと同じ順序で強制的にcURLをPOSTにします。
$file = "/var/www/html/dl/big.mp4";
$target_url = 'http://upload.site/uploadpage';
$file_name_with_full_path = realpath($file);
$post = array('sid' => 'H1nbWKcdYP7eS7DzJk0Z6BjGaC842vPO', 'cmd' => 'uploadVideoFiles', 'uploadfile'=>'@'.$file_name_with_full_path);
$ch = curl_init();
$browser = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0';
curl_setopt($ch, CURLOPT_USERAGENT, $browser);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: max-age=0',
'Connection: keep-alive',
'Host: upload.sitehost',
)
);
$result=curl_exec($ch);
curl_close ($ch);
echo $result;
すでにhttp_build_query() のurlencoded curlop_postfieldも試しました。 私はcurl_exec($ ch)をprintigして、応答1を取得します。 しかし、私はこのようにJSONレスポンスを必要とする:応答があるuploadfileポスト順序は、SID、CMDではない場合} ' ' "レスポンス":{ "u354DrwWnEIZUD2x" "コード":0、 "vcode"} '{"応答 ":{"コード ":2}}' – ForWhhY
私の更新を参照してください。デフォルトでは何も返されません。 – miken32
あなたのコードをテストしましたが、まだ結果が得られます:1、多分OKですが、私はjsonの応答が必要です – ForWhhY