Files
cos-cpp-sdk-v5/include/request/base_req.h
a158 3cf88acc07 BG
2026-04-05 20:22:11 +08:00

144 lines
4.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Copyright (c) 2017, Tencent Inc.
// All rights reserved.
//
// Author: sevenyou <sevenyou@tencent.com>
// Created: 07/15/17
// Description:
#pragma once
#include <stdint.h>
#include <map>
#include <string>
#include "util/string_util.h"
namespace qcloud_cos {
/// \brief 封装Http请求
class BaseReq {
public:
typedef std::map<std::string, std::string> Str2StrMap;
public:
BaseReq();
virtual ~BaseReq() {}
/// \brief 设置请求头部
void AddHeader(const std::string& key, const std::string& value);
void AddHeaders(const Str2StrMap& user_headers);
/// \brief 获取请求头部
std::string GetHeader(const std::string& key) const;
const Str2StrMap& GetHeaders() const { return m_headers_map; }
/// \brief 清空请求头部
void ClearHeaders() { m_headers_map.clear(); }
/// \brief 设置请求参数
void AddParam(const std::string& key, const std::string& value);
void AddParams(const Str2StrMap& user_params);
/// \brief 获取请求参数
std::string GetParam(const std::string& key) const;
const Str2StrMap& GetParams() const { return m_params_map; };
/// \brief 清空请求参数
void ClearParams() { m_params_map.clear(); }
/// \brief 获取请求的http方法
std::string GetMethod() const { return m_method; }
/// \brief 设置请求的http方法
void SetMethod(const std::string& method) {
m_method = StringUtil::StringToUpper(method);
}
/// \brief 获取请求的body
std::string GetBody() const { return m_body; }
/// \brief 设置请求的body
void SetBody(const std::string& body) { m_body = body; }
/// \brief 获取Path
std::string GetPath() const { return m_path; }
/// \brief 设置Path
void SetPath(const std::string& path) { m_path = path; }
void SetConnTimeoutInms(uint64_t conn_timeout_in_ms) {
m_conn_timeout_in_ms = conn_timeout_in_ms;
}
uint64_t GetConnTimeoutInms() const { return m_conn_timeout_in_ms; }
void SetRecvTimeoutInms(uint64_t recv_timeout_in_ms) {
m_recv_timeout_in_ms = recv_timeout_in_ms;
}
uint64_t GetRecvTimeoutInms() const { return m_recv_timeout_in_ms; }
/// \brief 设置当前请求是否使用https
void SetHttps() { m_is_https = true; }
bool IsHttps() const { return m_is_https; }
void SetSSLCtxCallback(const SSLCtxCallback& ssl_ctx_cb, void *user_data) {
m_ssl_ctx_cb = ssl_ctx_cb;
m_user_data = user_data;
}
const SSLCtxCallback& GetSSLCtxCallback() const { return m_ssl_ctx_cb; }
void *GetSSLCtxCbData() const { return m_user_data; }
/// \brief set whether check content md5 each request, used for close range
/// download check
void SetCheckMD5(bool check_md5) { mb_check_md5 = check_md5; }
bool CheckMD5() const { return mb_check_md5; }
void SetCheckCRC64(bool check_crc64) { mb_check_crc64 = check_crc64; }
bool CheckCRC64() const { return mb_check_crc64; }
void SetCaLocation(const std::string& ca_location) { m_ca_location = ca_location; }
const std::string& GetCaLocation() const { return m_ca_location; }
void SetVerifyCert(bool verify_cert) { mb_verify_cert = verify_cert; }
bool GetVerifyCert() const { return mb_verify_cert; }
/// \brief 输出请求的header和param信息
std::string DebugString() const;
/// \brief 是否生成对header host
/// 是否对host进行签名默认为true您也可以选择不签入host
/// 但可能导致请求失败或安全漏洞
void SetSignHeaderHost(bool sign_header_host) {
m_sign_header_host = sign_header_host;
}
bool SignHeaderHost() const { return m_sign_header_host; }
protected:
// acl相关的请求供PutObjectACL和PutBucketACL使用
bool GenerateAclRequestBody(const Owner& owner, const std::vector<Grant>& acl,
std::string* body) const;
protected:
Str2StrMap m_headers_map;
Str2StrMap m_params_map;
std::string m_path;
std::string m_method;
std::string m_body;
uint64_t m_conn_timeout_in_ms;
uint64_t m_recv_timeout_in_ms;
bool m_is_https;
bool mb_check_md5; // default is true
bool mb_check_crc64; // default is false
bool mb_verify_cert; // default is true
bool m_sign_header_host; // 是否对header host进行签名
std::string m_ca_location;
SSLCtxCallback m_ssl_ctx_cb;
void* m_user_data;
};
} // namespace qcloud_cos