summaryrefslogtreecommitdiffstats
path: root/curl_tofile.c
diff options
context:
space:
mode:
Diffstat (limited to 'curl_tofile.c')
-rw-r--r--curl_tofile.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/curl_tofile.c b/curl_tofile.c
new file mode 100644
index 0000000..7cd25ca
--- /dev/null
+++ b/curl_tofile.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <curl/curl.h>
+
+size_t write_data(char *ptr, size_t size, size_t nmemb, void *userdata)
+{
+ /* return size * nmemb; */
+ return fwrite(ptr, size, nmemb, (FILE *) userdata);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc != 2)
+ {
+ fprintf(stderr, "usage: %s <url>\n", argv[0]);
+ return 1;
+ }
+
+ CURL *curl_handle;
+ CURLcode ret;
+
+ curl_handle = curl_easy_init();
+ if (curl_handle)
+ {
+ curl_easy_setopt(curl_handle, CURLOPT_URL, argv[1]);
+ curl_easy_setopt(curl_handle, CURLOPT_HEADER, 1L);
+ /* some servers don't like requests that are made without a user-agent
+ * field, so we provide one */
+ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
+ char err_buff[CURL_ERROR_SIZE];
+ curl_easy_setopt(curl_handle, CURLOPT_ERRORBUFFER, err_buff);
+ /* send all data to this function */
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
+
+ /* by default passes NULL aka stdout */
+ FILE *fl;
+ if ((fl = fopen("dump.curl", "w")))
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, fl);
+ else
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, stdout);
+
+ if ((ret = curl_easy_perform(curl_handle)) != CURLE_OK)
+ fprintf(stderr, "%s\n", err_buff);
+ else
+ {
+ /* ask for the content-type */
+ char *ct;
+ ret = curl_easy_getinfo(curl_handle, CURLINFO_CONTENT_TYPE, &ct);
+ if ((CURLE_OK == ret) && ct)
+ printf("Content-Type: %s\n", ct);
+ }
+
+ /* always cleanup */
+ fclose(fl);
+ curl_easy_cleanup(curl_handle);
+ }
+
+ return 0;
+}
+