summaryrefslogtreecommitdiffabout
path: root/lib
Side-by-side diff
Diffstat (limited to 'lib') (more/less context) (show whitespace changes)
-rw-r--r--lib/consumer.cc26
1 files changed, 25 insertions, 1 deletions
diff --git a/lib/consumer.cc b/lib/consumer.cc
index 282f0cc..dd8e150 100644
--- a/lib/consumer.cc
+++ b/lib/consumer.cc
@@ -311,5 +311,5 @@ namespace opkele {
}
- string consumer_t::canonicalize(const string& url) {
+ string consumer_t::normalize(const string& url) {
string rv = url;
// strip leading and trailing spaces
@@ -343,3 +343,27 @@ namespace opkele {
}
+ string consumer_t::canonicalize(const string& url) {
+ string rv = normalize(url);
+ curl_t curl = curl_easy_init();
+ if(!curl)
+ throw exception_curl(OPKELE_CP_ "failed to curl_easy_init()");
+ string html;
+ CURLcode r;
+ (r=curl_misc_sets(curl))
+ || (r=curl_easy_setopt(curl,CURLOPT_URL,rv.c_str()))
+ || (r=curl_easy_setopt(curl,CURLOPT_NOBODY,1))
+ ;
+ if(r)
+ throw exception_curl(OPKELE_CP_ "failed to curl_easy_setopt()",r);
+ r = curl_easy_perform(curl);
+ if(r)
+ throw exception_curl(OPKELE_CP_ "failed to curl_easy_perform()",r);
+ const char *eu = 0;
+ r = curl_easy_getinfo(curl,CURLINFO_EFFECTIVE_URL,&eu);
+ if(r)
+ throw exception_curl(OPKELE_CP_ "failed to curl_easy_getinfo(..CURLINFO_EFFECTIVE_URL..)",r);
+ rv = eu;
+ return normalize(rv);
+ }
+
}