いつもお世話になっております。
標記の件について、HTMLで記述したフォームを利用してPOST送信することはできるのですが、
フォームを介さずに指定したURLでダウンロードできるCSVファイルを別のアップロード用URLに
POST送信したく、いろいろと調べてみたのですが、自己解決できなかったので、
こちらに聞きこみさせていただきました。
POST送信にはcURLを利用しています。
ちなみに、指定したURLからCSVファイルの情報を取得する部分までは、
以下のコードで特に問題なくできています。
php
1$download_url = 'http://sample.com/download/'; 2 3$ch = curl_init($download_url); 4curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 5$content = curl_exec($ch); 6curl_close($ch); 7
$contentの中身を出力して、CSV形式のデータが表示されることは確認済みです。
そして、問題なのがPOST送信の方になります。
php
1$upload_url = 'http://sample.com/upload/'; 2$header = array( 3 'Content-Type: multipart/form-data', 4 'Content-Length: ' . strlen($content), // ここは自信ないです。 5); 6$post_data = array( 7 'file' => $file, // ここに何を入れていいのかがよく分かっていません 8); 9 10$ch = curl_init($upload_url); 11curl_setopt($ch, CURLOPT_POST, true); 12curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 13curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 14curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 15$response = curl_exec($ch); 16curl_close($ch);
上記のコメントのところに書きましたように、アップロード側の受け入れ先の変数名である
「file」に何を入れたらよいのか分からなかったので、
試しにHTMLのフォームでファイルをPOSTした時の$_FILEを参考に以下のように書いてみましたが、
php
1$file = array( 2 'name' => 'upload.csv', 3 'type' => 'text/csv', 4 'tmp_name' => $content, // ここに何を入れていいのかがよく分かっていません 5 'error' => 0, 6 'size' => strlen($content), // ここも自信ないです。 7);
「tmp_name」のところは、フォームからアップロードした際の一時ファイルの
保存先のため、自分でもまず間違いだと思っています。
ただ、フォームを介さない場合のファイルデータの場合は、
何を入れるべきか見当がつかない状況です。
php
1$post_data = array( 2 'file' => '@./upload.csv;filename=upload.csv;type=text/csv', 3);
また、いろいろと検索している際、「file」の部分は上記のような記述方法を
見かけましたが、こちらも最初のファイル名は一時ファイルの保存先と思われるため、
結局何を入れるべきか分かりませんでした。
つきましては、フォームを介さずにCSVファイルをPOST送信する方法について、
ご教授いただければ幸いです。
「file」部分にこだわっていましたが、全く見当違いのことを調べているかも
知れませんし、他にもっとスマートな実装方法があれば、
PHPであれば特にcURLでのPOST送信にはこだわりません。
それでは、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/11 06:37
2016/01/11 06:47
退会済みユーザー
2016/01/11 08:07
2016/01/11 09:01
2016/01/12 09:17
2017/05/18 09:02
2017/06/09 10:04