blob: c77789bc2841035b995396633668e4a286b9f9ba [file] [log] [blame]
/********************************************************************
* 2014 -
* open source under Apache License Version 2.0
********************************************************************/
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _HDFS_LIBHDFS3_CLIENT_HTTPCLIENT_H_
#define _HDFS_LIBHDFS3_CLIENT_HTTPCLIENT_H_
#include <string>
#include <vector>
#include <curl/curl.h>
#include "Exception.h"
#include "ExceptionInternal.h"
typedef enum httpMethod {
HTTP_GET = 0,
HTTP_POST = 1,
HTTP_DELETE = 2,
HTTP_PUT = 3
} httpMethod;
namespace Hdfs {
class HttpClient {
public:
HttpClient();
/**
* Construct a HttpClient instance.
* @param url a url which is the address to send the request to the corresponding http server.
*/
HttpClient(const std::string &url);
/**
* Destroy a HttpClient instance.
*/
virtual ~HttpClient();
/**
* Set url for http client.
*/
void setURL(const std::string &url);
/**
* Set headers for http client.
*/
void setHeaders(const std::vector<std::string> &headers);
/**
* Set body for http client.
*/
void setBody(const std::string &body);
/**
* Set retry times for http request which can be configured in config file.
*/
void setRequestRetryTimes(int requst_retry_times);
/**
* Set request timeout which can be configured in config file.
*/
void setRequestTimeout(int64_t curl_timeout);
/**
* Set expected response code.
*/
void setExpectedResponseCode(int64_t response_code_ok);
/**
* Init curl handler and set options for curl.
*/
void init();
/**
* Do clean up for curl.
*/
void destroy();
/**
* Http POST method.
*/
virtual std::string post();
/**
* Http DELETE method.
*/
virtual std::string del();
/**
* Http PUT method.
*/
virtual std::string put();
/**
* Http GET method.
*/
virtual std::string get();
/**
* URL encodes the given string.
*/
std::string escape(const std::string &data);
/**
* Receive error string from curl.
*/
std::string errorString();
private:
/**
* Http common method to get response info by sending request to http server.
* @param method : define different http methods.
* @return return response info.
*/
std::string httpCommon(httpMethod method);
/**
* Curl call back function to receive the reponse messages.
* @return return the size of reponse messages.
*/
static size_t CurlWriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp);
static bool initialized;
CURLcode res;
std::string url;
std::vector<std::string> headers;
std::string body;
int64_t response_code_ok;
int request_retry_times;
int64_t curl_timeout;
CURL *curl;
struct curl_slist *list;
std::string response;
char errbuf[CURL_ERROR_SIZE] = { 0 };
};
}
#endif