diff --git src/Wt/Http/Client src/Wt/Http/Client index 243d465..be7de67 100644 --- src/Wt/Http/Client +++ src/Wt/Http/Client @@ -220,6 +220,38 @@ public: */ bool post(const std::string& url, const Message& message); + /*! \brief Starts a PUT request. + * + * The function starts an asynchronous PUT request, and returns + * immediately. + * + * The function returns \c true when the PUT request has been + * scheduled, and thus done() will be emitted eventually. + * + * The function returns \p false if the client could not schedule + * the request, for example if the \p url is invalid or if the %URL + * scheme is not supported. + * + * \sa request(), done() + */ + bool put(const std::string& url, const Message& message); + + /*! \brief Starts a DELETE request. + * + * The function starts an asynchronous DELETE request, and returns + * immediately. + * + * The function returns \c true when the DELETE request has been + * scheduled, and thus done() will be emitted eventually. + * + * The function returns \p false if the client could not schedule + * the request, for example if the \p url is invalid or if the %URL + * scheme is not supported. + * + * \sa request(), done() + */ + bool deleteRequest(const std::string& url, const Message& message); + /*! \brief Starts a request. * * The function starts an asynchronous HTTP request, and returns diff --git src/Wt/Http/Client.C src/Wt/Http/Client.C index 43fbbe1..834d793 100644 --- src/Wt/Http/Client.C +++ src/Wt/Http/Client.C @@ -77,13 +77,13 @@ public: request_stream << h.name() << ": " << h.value() << "\r\n"; } - if (method == "POST" && !haveContentLength) + if ((method == "POST" || method == "PUT" || method == "DELETE") && !haveContentLength) request_stream << "Content-Length: " << message.body().length() << "\r\n"; request_stream << "Connection: close\r\n\r\n"; - if (method == "POST") + if (method == "POST" || method == "PUT" || method == "DELETE") request_stream << message.body(); tcp::resolver::query query(server, boost::lexical_cast(port)); @@ -551,6 +551,16 @@ bool Client::post(const std::string& url, const Message& message) return request(Post, url, message); } +bool Client::put(const std::string& url, const Message& message) +{ + return request(Put, url, message); +} + +bool Client::deleteRequest(const std::string& url, const Message& message) +{ + return request(Delete, url, message); +} + bool Client::request(Http::Method method, const std::string& url, const Message& message) { @@ -618,7 +628,7 @@ bool Client::request(Http::Method method, const std::string& url, impl_->setTimeout(timeout_); impl_->setMaximumResponseSize(maximumResponseSize_); - const char *methodNames_[] = { "GET", "POST", "PUT" }; + const char *methodNames_[] = { "GET", "POST", "PUT", "DELETE" }; LOG_DEBUG(methodNames_[method] << " " << url); diff --git src/Wt/Http/Method src/Wt/Http/Method index 8dd8923..26ebc22 100644 --- src/Wt/Http/Method +++ src/Wt/Http/Method @@ -16,9 +16,10 @@ namespace Wt { * used HTTP methods. */ enum Method { - Get, //!< a HTTP GET - Post, //!< a HTTP POST - Put //!< a HTTP PUT + Get, //!< a HTTP GET + Post, //!< a HTTP POST + Put, //!< a HTTP PUT + Delete //!< a HTTP DELETE }; }