学校が提供する専用サーバーに学校の課題をアップロードするための小さなツールに取り組んでおり、 のラッパーであるocaml
andを使用することにしました。コマンドラインから (curl を使用して) やりたいことはすべて取得できますが、ocurl を使用してファイルをアップロードすることはできません。ocurl
ocaml
libcurl
multipart/form-data
これは、サーバーページがコンテンツタイプとして期待しているためだと思います。libcurl
私が使用したドキュメントを読んだ後curl_formadd()
(コマンドラインからそれを行います)、ocurlはそれを行うことができません(このようなものは見つかりませんでしたcurl.ml
)
作業中のcurlコマンドライン:
curl -v "myhost/upload2.php" --form "fichier1= @file.tar.gz" --form "MAX_FILE_SIZE=1000000" -b cookie
応答
> POST /upload2.php HTTP/1.1
> User-Agent: curl/7.32.0
> Host: myhost
> Accept: */*
> Cookie: PHPSESSID=4qbihrkhode23902q1v988a114; cookie_test=1
> Content-Length: 10563
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=------------------------53aa2e4a08d1f7c0
>
< HTTP/1.1 100 Continue
< HTTP/1.1 200 OK
< Date: Wed, 23 Oct 2013 17:34:21 GMT
* Server Apache/2.2.16 (Debian) is not blacklisted
< Server: Apache/2.2.16 (Debian)
< X-Powered-By: PHP/5.3.3-7+squeeze17
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Vary: Accept-Encoding
< Content-Length: 2265
< Content-Type: text/html
<
私の最も近い非動作ocaml
コード
let fetch connection url =
Printf.printf "Retriving %s ...\n" (url);
flush stdout;
Curl.set_url connection url;
Curl.perform connection;
Curl.set_post connection false
in
Curl.global_init Curl.CURLINIT_GLOBALALL;
let connection = Curl.init() in
Curl.set_verbose connection true;
let curl_file_option = Curl.CURLFORM_FILECONTENT("fichier1","file.tar.gz",Curl.CONTENTTYPE "application/x-tar") in
Curl.set_maxfilesize connection (Int32.of_int 1000000);
Curl.set_httppost connection [curl_file_option];
fetch connection (baseURL^"upload2.php");
;;
100%のCPUを使用する以外は何もしません
最後に、質問は次のとおりです。独自の formdata 関数を作成するのを手伝ってくれませんか?