1 /* 2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <iostream> 17 #include <vector> 18 #include <algorithm> 19 #include <cctype> 20 21 #include "http_client_request.h" 22 #include "http_client_constant.h" 23 #include "netstack_common_utils.h" 24 #include "netstack_log.h" 25 26 namespace OHOS { 27 namespace NetStack { 28 namespace HttpClient { 29 static constexpr const uint32_t HTTP_MIN_PRIORITY = 1; 30 static constexpr const uint32_t HTTP_DEFAULT_PRIORITY = 500; 31 static constexpr const uint32_t HTTP_MAX_PRIORITY = 1000; 32 HttpClientRequest()33 HttpClientRequest::HttpClientRequest() 34 : method_(HttpConstant::HTTP_METHOD_GET), 35 timeout_(HttpConstant::DEFAULT_READ_TIMEOUT), 36 connectTimeout_(HttpConstant::DEFAULT_CONNECT_TIMEOUT), 37 protocol_(HttpProtocol::HTTP_NONE), 38 proxyType_(HttpProxyType::NOT_USE), 39 priority_(HTTP_DEFAULT_PRIORITY) 40 { 41 } 42 SetURL(const std::string & url)43 void HttpClientRequest::SetURL(const std::string &url) 44 { 45 url_ = url; 46 } 47 SetHeader(const std::string & key,const std::string & val)48 void HttpClientRequest::SetHeader(const std::string &key, const std::string &val) 49 { 50 headers_[CommonUtils::ToLower(key)] = val; 51 } 52 MethodForGet(const std::string & method)53 bool HttpClientRequest::MethodForGet(const std::string &method) 54 { 55 return (method == HttpConstant::HTTP_METHOD_HEAD || method == HttpConstant::HTTP_METHOD_OPTIONS || 56 method == HttpConstant::HTTP_METHOD_DELETE || method == HttpConstant::HTTP_METHOD_TRACE || 57 method == HttpConstant::HTTP_METHOD_GET || method == HttpConstant::HTTP_METHOD_CONNECT); 58 } 59 MethodForPost(const std::string & method)60 bool HttpClientRequest::MethodForPost(const std::string &method) 61 { 62 return (method == HttpConstant::HTTP_METHOD_POST || method == HttpConstant::HTTP_METHOD_PUT); 63 } 64 SetMethod(const std::string & method)65 void HttpClientRequest::SetMethod(const std::string &method) 66 { 67 if (!MethodForGet(method) && !MethodForPost(method) && !method.empty()) { 68 NETSTACK_LOGE("HttpClientRequest::SetMethod method %{public}s not supported", method.c_str()); 69 return; 70 } 71 72 method_ = method; 73 } 74 SetBody(const void * data,size_t length)75 void HttpClientRequest::SetBody(const void *data, size_t length) 76 { 77 body_.append(static_cast<const char *>(data), length); 78 } 79 SetTimeout(unsigned int timeout)80 void HttpClientRequest::SetTimeout(unsigned int timeout) 81 { 82 timeout_ = timeout; 83 } 84 SetConnectTimeout(unsigned int timeout)85 void HttpClientRequest::SetConnectTimeout(unsigned int timeout) 86 { 87 connectTimeout_ = timeout; 88 } 89 SetHttpProtocol(HttpProtocol protocol)90 void HttpClientRequest::SetHttpProtocol(HttpProtocol protocol) 91 { 92 protocol_ = protocol; 93 } 94 SetHttpProxyType(HttpProxyType type)95 void HttpClientRequest::SetHttpProxyType(HttpProxyType type) 96 { 97 proxyType_ = type; 98 } 99 SetCaPath(const std::string & path)100 void HttpClientRequest::SetCaPath(const std::string &path) 101 { 102 if (path.empty()) { 103 NETSTACK_LOGE("HttpClientRequest::SetCaPath path is empty"); 104 return; 105 } 106 caPath_ = path; 107 } 108 SetPriority(unsigned int priority)109 void HttpClientRequest::SetPriority(unsigned int priority) 110 { 111 if (priority < HTTP_MIN_PRIORITY || priority > HTTP_MAX_PRIORITY) { 112 NETSTACK_LOGE("HttpClientRequest::SetPriority priority %{public}d is invalid", priority); 113 return; 114 } 115 priority_ = priority; 116 } 117 GetURL() const118 const std::string &HttpClientRequest::GetURL() const 119 { 120 return url_; 121 } 122 GetMethod() const123 const std::string &HttpClientRequest::GetMethod() const 124 { 125 return method_; 126 } 127 GetBody() const128 const std::string &HttpClientRequest::GetBody() const 129 { 130 return body_; 131 } 132 GetHeaders() const133 const std::map<std::string, std::string> &HttpClientRequest::GetHeaders() const 134 { 135 return headers_; 136 } 137 GetTimeout()138 unsigned int HttpClientRequest::GetTimeout() 139 { 140 return timeout_; 141 } 142 GetConnectTimeout()143 unsigned int HttpClientRequest::GetConnectTimeout() 144 { 145 return connectTimeout_; 146 } 147 GetHttpProtocol()148 HttpProtocol HttpClientRequest::GetHttpProtocol() 149 { 150 return protocol_; 151 } 152 GetHttpProxyType()153 HttpProxyType HttpClientRequest::GetHttpProxyType() 154 { 155 return proxyType_; 156 } 157 GetCaPath()158 const std::string &HttpClientRequest::GetCaPath() 159 { 160 return caPath_; 161 } 162 GetPriority() const163 uint32_t HttpClientRequest::GetPriority() const 164 { 165 return priority_; 166 } 167 SetHttpProxy(const HttpProxy & proxy)168 void HttpClientRequest::SetHttpProxy(const HttpProxy &proxy) 169 { 170 proxy_ = proxy; 171 } 172 GetHttpProxy() const173 const HttpProxy &HttpClientRequest::GetHttpProxy() const 174 { 175 return proxy_; 176 } 177 SetRequestTime(const std::string & time)178 void HttpClientRequest::SetRequestTime(const std::string &time) 179 { 180 requestTime_ = time; 181 } 182 GetRequestTime() const183 const std::string &HttpClientRequest::GetRequestTime() const 184 { 185 return requestTime_; 186 } 187 } // namespace HttpClient 188 } // namespace NetStack 189 } // namespace OHOS 190