Instead of throwing, run the failure handler for requests with
either a missing spec or something other than http:// (eg, https
or ftp)
void Client::makeRequest(const Request_ptr& r)
{
- if( r->url().find("://") == std::string::npos )
- throw std::runtime_error("Unable to parse URL (missing scheme)");
+ if( r->url().find("://") == std::string::npos ) {
+ r->setFailure(EINVAL, "malformed URL");
+ return;
+ }
+ if( r->url().find("http://") != 0 ) {
+ r->setFailure(EINVAL, "only HTTP protocol is supported");
+ return;
+ }
+
string host = r->host();
int port = r->port();
if (!d->proxy.empty()) {