{
assert(!sentRequests.empty());
- activeRequest = sentRequests.front();
+ activeRequest = sentRequests.front();
activeRequest->responseStart(buffer);
state = STATE_GETTING_HEADERS;
buffer.clear();
Request_ptr r = queuedRequests.front();
requestBodyBytesToSend = r->requestBodyLength();
-
+
stringstream headerData;
string path = r->path();
+ assert(!path.empty());
string query = r->query();
string bodyData;
path = r->scheme() + "://" + r->host() + r->path();
}
- if (r->method() == "POST") {
+ if (r->requestBodyType() == CONTENT_TYPE_URL_ENCODED) {
headerData << r->method() << " " << path << " HTTP/1.1\r\n";
bodyData = query.substr(1); // URL-encode, drop the leading '?'
headerData << "Content-Type:" << CONTENT_TYPE_URL_ENCODED << "\r\n";
private:
bool connectToHost()
{
- SG_LOG(SG_IO, SG_INFO, "HTTP connecting to " << host << ":" << port);
+ SG_LOG(SG_IO, SG_DEBUG, "HTTP connecting to " << host << ":" << port);
if (!open()) {
SG_LOG(SG_ALL, SG_WARN, "HTTP::Connection: connectToHost: open() failed");
_connections.erase(del);
} else {
if (it->second->shouldStartNext()) {
- SG_LOG(SG_IO, SG_INFO, "should start next, hmm");
it->second->tryStartNextRequest();
}
}
int hostEnd = u.find('/', schemeEnd + 3);
- if (hostEnd < 0) {
- return ""; // couldn't parse host
+ if (hostEnd < 0) {
+// couldn't parse host, or URL looks like 'http://foo.com' (no trailing '/')
+// fixup to root resource path: '/'
+ return "/";
}
int query = u.find('?', hostEnd + 1);
void Request::failed()
{
// no-op in base class
+ SG_LOG(SG_IO, SG_INFO, "request failed:" << url());
}
Request::HTTPVersion Request::decodeVersion(const string& v)