mirror of
https://github.com/dlang/phobos.git
synced 2025-05-13 15:52:41 +03:00
fix Issue 11879 - missing default User-Agent in std.net.curl
- use "Phobos-std.net.curl/2.065 (libcurl/7.32.0)" as default "User-Agent" - add method to set a different user agent
This commit is contained in:
parent
b364a2f5f5
commit
b84b43ff5d
1 changed files with 36 additions and 0 deletions
|
@ -2162,6 +2162,7 @@ struct HTTP
|
||||||
maxRedirects = HTTP.defaultMaxRedirects;
|
maxRedirects = HTTP.defaultMaxRedirects;
|
||||||
p.charset = "ISO-8859-1"; // Default charset defined in HTTP RFC
|
p.charset = "ISO-8859-1"; // Default charset defined in HTTP RFC
|
||||||
p.method = Method.undefined;
|
p.method = Method.undefined;
|
||||||
|
setUserAgent(HTTP.defaultUserAgent);
|
||||||
dataTimeout = _defaultDataTimeout;
|
dataTimeout = _defaultDataTimeout;
|
||||||
onReceiveHeader = null;
|
onReceiveHeader = null;
|
||||||
version (unittest) verbose = true;
|
version (unittest) verbose = true;
|
||||||
|
@ -2460,12 +2461,47 @@ struct HTTP
|
||||||
*/
|
*/
|
||||||
void addRequestHeader(const(char)[] name, const(char)[] value)
|
void addRequestHeader(const(char)[] name, const(char)[] value)
|
||||||
{
|
{
|
||||||
|
if (icmp(name, "User-Agent") == 0)
|
||||||
|
return setUserAgent(value);
|
||||||
string nv = format("%s: %s", name, value);
|
string nv = format("%s: %s", name, value);
|
||||||
p.headersOut = curl_slist_append(p.headersOut,
|
p.headersOut = curl_slist_append(p.headersOut,
|
||||||
cast(char*) toStringz(nv));
|
cast(char*) toStringz(nv));
|
||||||
p.curl.set(CurlOption.httpheader, p.headersOut);
|
p.curl.set(CurlOption.httpheader, p.headersOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default "User-Agent" value send with a request.
|
||||||
|
* It has the form "Phobos-std.net.curl/$(I PHOBOS_VERSION) (libcurl/$(I CURL_VERSION))"
|
||||||
|
*/
|
||||||
|
static immutable string defaultUserAgent;
|
||||||
|
|
||||||
|
shared static this()
|
||||||
|
{
|
||||||
|
import std.compiler : version_major, version_minor;
|
||||||
|
|
||||||
|
// http://curl.haxx.se/docs/versions.html
|
||||||
|
enum fmt = "Phobos-std.net.curl/%d.%03d (libcurl/%d.%d.%d)";
|
||||||
|
enum maxLen = fmt.length - "%d%03d%d%d%d".length + 10 + 10 + 3 + 3 + 3;
|
||||||
|
|
||||||
|
__gshared char[maxLen] buf = void;
|
||||||
|
|
||||||
|
auto curlVer = curl_version_info(CURLVERSION_NOW).version_num;
|
||||||
|
defaultUserAgent = cast(immutable)sformat(
|
||||||
|
buf, fmt, version_major, version_minor,
|
||||||
|
curlVer >> 16 & 0xFF, curlVer >> 8 & 0xFF, curlVer & 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set the value of the user agent request header field.
|
||||||
|
*
|
||||||
|
* By default a request has it's "User-Agent" field set to $(LREF
|
||||||
|
* defaultUserAgent) even if $(D setUserAgent) was never called. Pass
|
||||||
|
* an empty string to suppress the "User-Agent" field altogether.
|
||||||
|
*/
|
||||||
|
void setUserAgent(const(char)[] userAgent)
|
||||||
|
{
|
||||||
|
p.curl.set(CurlOption.useragent, userAgent);
|
||||||
|
}
|
||||||
|
|
||||||
/** The headers read from a successful response.
|
/** The headers read from a successful response.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue