Represents an HTTP message being sent or received.
status_code
will normally be a Status value, eg,
OK, though of course it might actually be an unknown status code. reason_phrase
is the actual text returned from the server, which may or may not correspond to the "standard" description of status_code
. At any rate, it is almost certainly not localized, and not very descriptive even if it is in the user's language; you should not
use reason_phrase
in user-visible messages. Rather, you should look at status_code
, and determine an
end-user-appropriate message based on that and on what you were trying to do.
As described in the MessageBody documentation, the request_body
and
response_body
data fields will not necessarily be filled in at all times. When the body fields are filled in, they will be
terminated with a '\0' byte (which is not included in the length), so you can use them as ordinary C strings (assuming that you
know that the body doesn't have any other '\0' bytes).
For a client-side Message, request_body
's data is usually filled in right before libsoup
writes the request to the network, but you should not count on this; use flatten
if you want to ensure that data is filled in. If you are not using Request to
read the response, then response_body
's data will be filled in before
finished is emitted. (If you are using
Request, then the message body is not accumulated by default, so response_body
's data will always be null
.)
For a server-side Message, request_body
's data
will be filled in before
got_body is emitted.
To prevent the data
field from being filled in at all (eg, if you are handling the data from a
got_chunk, and so don't need to see it all at the end), call
set_accumulate on response_body
or request_body
as appropriate, passing false
.
Example: Cookies, sync:
public static int main (string[] args) {
// Create a session:
Soup.Session session = new Soup.Session ();
// Add a logger:
Soup.Logger logger = new Soup.Logger (Soup.LoggerLogLevel.MINIMAL, -1);
session.add_feature (logger);
// Create a cookie:
Soup.Cookie cookie = new Soup.Cookie ("soup-cookie", "my-val", "api.valadoc.org", "/", -1);
SList<Soup.Cookie> list = new SList<Soup.Cookie> ();
list.append (cookie);
// Send a request:
Soup.Message msg = new Soup.Message ("GET", "http://api.valadoc.org/soup-samples/print-and-create-cookies.php");
Soup.cookies_to_request (list, msg);
session.send_message (msg);
// Process the result:
msg.response_headers.foreach ((name, val) => {
print ("%s = %s\n", name, val);
});
print ("Status Code: %u\n", msg.status_code);
print ("Message length: %lld\n", msg.response_body.length);
print ("Data: \n%s\n", (string) msg.response_body.data);
GLib.SList<Soup.Cookie> cookies = Soup.cookies_from_request (msg);
print ("Cookies from request: (%u)\n", cookies.length ());
foreach (Soup.Cookie c in cookies) {
print (" %s: %s\n", c.name, c.value);
}
cookies = Soup.cookies_from_response (msg);
print ("Cookies from response: (%u)\n", cookies.length ());
foreach (Soup.Cookie c in cookies) {
print (" %s: %s\n", c.name, c.value);
}
return 0;
}
valac --pkg libsoup-2.4 cookie-sample-sync.vala
- public uint add_header_handler (string @signal, string header, Callback callback, void* user_data)
Adds a signal handler to this for
signal
, as with connect, but the callback
will only be run if
this's incoming messages headers (that is, the request_headers for a client
Message, or the response_headers for a server Message) contain a header
named header
.
- public uint add_status_code_handler (string @signal, uint status_code, Callback callback, void* user_data)
Adds a signal handler to this for
signal
, as with connect, but the callback
will only be run if
this has the status status_code
.
- public void disable_feature (Type feature_type)
This disables the actions of
SessionFeatures with the given feature_type
(or a subclass of
that type) on this, so that this is processed as though the
feature(s) hadn't been added to the session.
- public unowned Address get_address ()
Gets the address this's URI points
to.
- public unowned URI get_first_party ()
Gets this's first-party
URI
- public MessageFlags get_flags ()
Gets the flags on this
- public HTTPVersion get_http_version ()
Gets the HTTP version of this.
- public bool get_https_status (out unowned TlsCertificate certificate, out TlsCertificateFlags errors)
If this is using https (or attempted
to use https but got SSL_FAILED), this retrieves the
TlsCertificate associated with its connection, and the TlsCertificateFlags showing what problems,
if any, have been found with that certificate.
- public bool get_is_top_level_navigation ()
- public MessagePriority get_priority ()
- public unowned URI get_site_for_cookies ()
Gets this's site for cookies
URI
- public unowned Request get_soup_request ()
If this is associated with a
Request, this returns that request.
- public unowned URI get_uri ()
Gets this's URI
- public bool is_feature_disabled (Type feature_type)
Get whether
SessionFeatures of the given feature_type
(or a subclass of that type) are disabled on
this.
- public bool is_keepalive ()
Determines whether or not this's
connection can be kept alive for further requests after processing this, based on the HTTP version,
Connection header, etc.
- public void set_chunk_allocator (owned ChunkAllocator allocator)
Sets an alternate chunk-allocation function to use when reading
this's body when using the traditional (ie, non-#SoupRequest-based) API.
- public void set_first_party (URI first_party)
Sets first_party
as the main document
URI for this.
- public void set_flags (MessageFlags flags)
Sets the specified flags on this.
- public void set_http_version (HTTPVersion version)
Sets the HTTP version on this.
- public void set_is_top_level_navigation (bool is_top_level_navigation)
See the [same-site spec](https://tools.
- public void set_priority (MessagePriority priority)
Sets the priority of a message.
- public void set_redirect (uint status_code, string redirect_uri)
Sets this's status_code to
status_code
and adds a Location header pointing to redirect_uri
.
- public void set_request (string? content_type, MemoryUse req_use, uint8[] req_body)
Convenience function to set the request body of a
Message.
- public void set_response (string? content_type, MemoryUse resp_use, uint8[]? resp_body)
Convenience function to set the response body of a
Message.
- public void set_site_for_cookies (URI? site_for_cookies)
Sets site_for_cookies
as the policy URL for same-site
cookies for this.
- public void set_status (uint status_code)
Sets this's status code to
status_code
.
- public void set_status_full (uint status_code, string reason_phrase)
Sets this's status code and reason
phrase.
- public void set_uri (URI uri)
Sets this's URI to uri
.