1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2001-2003, Ximian, Inc.
20 #include <libsoup/soup-gnome.h>
22 #include <libsoup/soup.h>
25 static SoupSession *session;
26 static GMainLoop *loop;
27 static gboolean debug = FALSE, quiet = FALSE;
28 static const char *method;
31 get_url (const char *url)
37 msg = soup_message_new (method, url);
38 soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT);
40 soup_session_send_message (session, msg);
42 name = soup_message_get_uri (msg)->path;
45 SoupMessageHeadersIter iter;
46 const char *hname, *value;
47 char *path = soup_uri_to_string (soup_message_get_uri (msg), TRUE);
49 printf ("%s %s HTTP/1.%d\n", method, path,
50 soup_message_get_http_version (msg));
51 soup_message_headers_iter_init (&iter, msg->request_headers);
52 while (soup_message_headers_iter_next (&iter, &hname, &value))
53 printf ("%s: %s\r\n", hname, value);
56 printf ("HTTP/1.%d %d %s\n",
57 soup_message_get_http_version (msg),
58 msg->status_code, msg->reason_phrase);
60 soup_message_headers_iter_init (&iter, msg->response_headers);
61 while (soup_message_headers_iter_next (&iter, &hname, &value))
62 printf ("%s: %s\r\n", hname, value);
64 } else if (!quiet || SOUP_STATUS_IS_TRANSPORT_ERROR (msg->status_code))
65 printf ("%s: %d %s\n", name, msg->status_code, msg->reason_phrase);
67 if (SOUP_STATUS_IS_REDIRECTION (msg->status_code)) {
68 header = soup_message_headers_get_one (msg->response_headers,
75 printf (" -> %s\n", header);
77 uri = soup_uri_new_with_base (soup_message_get_uri (msg), header);
78 uri_string = soup_uri_to_string (uri, FALSE);
83 } else if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
84 fwrite (msg->response_body->data, 1,
85 msg->response_body->length, stdout);
92 fprintf (stderr, "Usage: get [-c CAfile] [-p proxy URL] [-h] [-d] URL\n");
97 main (int argc, char **argv)
99 const char *cafile = NULL, *url;
100 SoupURI *proxy = NULL, *parsed;
101 gboolean synchronous = FALSE;
104 g_thread_init (NULL);
107 method = SOUP_METHOD_GET;
109 while ((opt = getopt (argc, argv, "c:dhp:qs")) != -1) {
120 method = SOUP_METHOD_HEAD;
125 proxy = soup_uri_new (optarg);
127 fprintf (stderr, "Could not parse %s as URI\n",
152 parsed = soup_uri_new (url);
154 fprintf (stderr, "Could not parse '%s' as a URL\n", url);
157 soup_uri_free (parsed);
160 session = soup_session_sync_new_with_options (
161 SOUP_SESSION_SSL_CA_FILE, cafile,
163 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_GNOME_FEATURES_2_26,
165 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
166 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR,
167 SOUP_SESSION_USER_AGENT, "get ",
168 SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
171 session = soup_session_async_new_with_options (
172 SOUP_SESSION_SSL_CA_FILE, cafile,
174 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_GNOME_FEATURES_2_26,
176 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
177 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR,
178 SOUP_SESSION_USER_AGENT, "get ",
179 SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
183 /* Need to do this after creating the session, since adding
184 * SOUP_TYPE_GNOME_FEATURE_2_26 will add a proxy resolver, thereby
185 * bashing over the manually-set proxy.
188 g_object_set (G_OBJECT (session),
189 SOUP_SESSION_PROXY_URI, proxy,
194 loop = g_main_loop_new (NULL, TRUE);
199 g_main_loop_unref (loop);