1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2001-2003, Ximian, Inc.
6 #include "test-utils.h"
9 static SoupSession *session;
10 static GMainLoop *loop;
11 static gboolean debug = FALSE, quiet = FALSE;
12 static const char *method;
15 get_url (const char *url)
21 msg = soup_message_new (method, url);
22 soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT);
24 soup_session_send_message (session, msg);
26 name = soup_message_get_uri (msg)->path;
29 SoupMessageHeadersIter iter;
30 const char *hname, *value;
31 char *path = soup_uri_to_string (soup_message_get_uri (msg), TRUE);
33 g_print ("%s %s HTTP/1.%d\n", method, path,
34 soup_message_get_http_version (msg));
35 soup_message_headers_iter_init (&iter, msg->request_headers);
36 while (soup_message_headers_iter_next (&iter, &hname, &value))
37 g_print ("%s: %s\r\n", hname, value);
40 g_print ("HTTP/1.%d %d %s\n",
41 soup_message_get_http_version (msg),
42 msg->status_code, msg->reason_phrase);
44 soup_message_headers_iter_init (&iter, msg->response_headers);
45 while (soup_message_headers_iter_next (&iter, &hname, &value))
46 g_print ("%s: %s\r\n", hname, value);
48 } else if (msg->status_code == SOUP_STATUS_SSL_FAILED) {
49 GTlsCertificateFlags flags;
51 if (soup_message_get_https_status (msg, NULL, &flags))
52 g_print ("%s: %d %s (0x%x)\n", name, msg->status_code, msg->reason_phrase, flags);
54 g_print ("%s: %d %s (no handshake status)\n", name, msg->status_code, msg->reason_phrase);
55 } else if (!quiet || SOUP_STATUS_IS_TRANSPORT_ERROR (msg->status_code))
56 g_print ("%s: %d %s\n", name, msg->status_code, msg->reason_phrase);
58 if (SOUP_STATUS_IS_REDIRECTION (msg->status_code)) {
59 header = soup_message_headers_get_one (msg->response_headers,
66 g_print (" -> %s\n", header);
68 uri = soup_uri_new_with_base (soup_message_get_uri (msg), header);
69 uri_string = soup_uri_to_string (uri, FALSE);
74 } else if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
75 fwrite (msg->response_body->data, 1,
76 msg->response_body->length, stdout);
83 g_printerr ("Usage: get [-c CAfile] [-p proxy URL] [-h] [-d] URL\n");
88 main (int argc, char **argv)
90 const char *cafile = NULL, *url;
91 SoupURI *proxy = NULL, *parsed;
92 gboolean synchronous = FALSE, ntlm = FALSE;
97 method = SOUP_METHOD_GET;
99 while ((opt = getopt (argc, argv, "c:dhnp:qs")) != -1) {
110 method = SOUP_METHOD_HEAD;
119 proxy = soup_uri_new (optarg);
121 g_printerr ("Could not parse %s as URI\n",
146 parsed = soup_uri_new (url);
148 g_printerr ("Could not parse '%s' as a URL\n", url);
151 soup_uri_free (parsed);
154 session = soup_session_sync_new_with_options (
155 SOUP_SESSION_SSL_CA_FILE, cafile,
156 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
157 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR,
158 SOUP_SESSION_USER_AGENT, "get ",
159 SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
160 SOUP_SESSION_USE_NTLM, ntlm,
163 session = soup_session_async_new_with_options (
164 SOUP_SESSION_SSL_CA_FILE, cafile,
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,
169 SOUP_SESSION_USE_NTLM, ntlm,
174 g_object_set (G_OBJECT (session),
175 SOUP_SESSION_PROXY_URI, proxy,
178 soup_session_add_feature_by_type (session, SOUP_TYPE_PROXY_RESOLVER_DEFAULT);
181 loop = g_main_loop_new (NULL, TRUE);
186 g_main_loop_unref (loop);