diff --git a/lib/modules/Protocols.pmod/HTTP.pmod/module.pmod b/lib/modules/Protocols.pmod/HTTP.pmod/module.pmod new file mode 100644 index 0000000000000000000000000000000000000000..f9acf901a94abea7e9d4d3eb1e340800f76168a3 --- /dev/null +++ b/lib/modules/Protocols.pmod/HTTP.pmod/module.pmod @@ -0,0 +1,45 @@ + +//! module Protocols +//! submodule HTTP +//! method string get_url(string url) +//! Sends a HTTP GET request to the server in the URL +//! and returns the created and initialized <ref>Query</ref> object. +//! 0 is returned upon failure. +//! +//! method array get_url_nice(string url) +//! Returns an array of ({content_type,data}) +//! after calling the requested server for the information. +//! 0 is returned upon failure. + +object get_url(string url) +{ + object con=master()->resolv("Protocols")["HTTP"]["Query"](); + + string prot="http",host; + int port=80; + string query; + + sscanf(url,"%[^:/]://%[^:/]:%d/%s",prot,host,port,query) == 4 || + (port=80,sscanf(url,"%[^:/]://%[^:/]/%s",prot,host,query)) == 3 || + (prot="http",sscanf(url,"%[^:/]:%d/%s",host,port,query)) == 3 || + (port=80,sscanf(url,"%[^:/]/%s",host,query)) == 2 || + (host=url,query="/"); + + if (prot!="http") + error("Protocols.HTTP can't handle %O or any other protocol then HTTP\n", + prot); + + con->sync_request(host,port, + "GET "+query+" HTTP/1.0", + (["user-agent": + "Mozilla/4.0 compatible (Pike HTTP client)"])); + + if (!con->ok) return 0; + return con; +} + +array(string) get_url_nice(string url) +{ + object c=get_url(url); + return c && ({c->headers["content-type"],c->data()}); +}