やあ!
サイトへの画像のアップロードを自動化しようとしていますが、魔女はデータベースを使用してファイルを追跡しています。ユーザー インターフェイスは...まあ、かなり安っぽく、ファイルがたくさんあります。私はデータベースにアクセスできないため、その回避策を見つける必要がありました。その結果、 cURLを使用してサイトのアップロード メカニズムを簡単に模倣できることがわかりました。
Mozilla の Firebug でブラウザから送信された POST データと、サイトのアップロード フォームのソース コードを調べました。サーバーに送信するために必要な POST フィールドを特定できたので、PHP で小さな cURL コマンドをまとめました。
私は Debian GNU/Linux とバージョン番号 5.3.20-1 の PHP を使用しています。関連するコードは次のようになります。
$strfilepath = '@' . $item->getPathname(); // get next file from directory (directory iterator)
$postdata = array();
$postdata['upload'] = 1;
$postdata['category_id'] = 43;
$postdata['imgtoupload'] = $strfilepath;
$postdata['actie'] = 1;
curl_setopt($somecurl, CURLOPT_URL, "http://some.site.at.somwhere.com/image_up.php");
curl_setopt($somecurl, CURLOPT_POST, true);
curl_setopt($somecurl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($somecurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($somecurl, CURLOPT_NOPROGRESS, false);
curl_setopt($somecurl, CURLOPT_VERBOSE, true); // FTW!
$response = curl_exec($somecurl);
ブラウザの POST コマンドを「人為的な」http リクエストと比較したいので、正確な質問は、cURL によって生成された POST (またはその他の HTTP) リクエストを取得する方法ですか? (Firebug ができるように。) curl でできる唯一のことは、CURLOPT_VERBOSE を有効にすることですが、返されるのはヘッダー データのみです。
curl_getinfo() の戻り値とコマンド ライン リストを調べたところ、サーバーが 302 HTTP 警告を出し、ファイルをアップロードしていないことがわかりました。
Connection #0 to host some.site.at.somwhere.com left intact
おそらく認証に問題がありますが、コードがサーバーに適切なデータを送信していることを確認したいと思います。
前もって感謝します!敬具: G.
編集 (13.01.09):
ハ!私はそれを作った!問題は、cURL が何らかの方法で送信データのタイプを上書きしたことでした。application/octet-stream
の代わりに画像をマークしましたimage/jpeg
。「送信するファイル」フィールドにタイプを明示的に指定したところ、魔女は問題を解決しました。
$strfilepath = '@' . $item->getPathname() . ";type=image/jpeg" ;
正常に動作します。助けてくれてありがとう!