comparison Core/HttpClient.cpp @ 1052:cc4ff680e2a0

http requests in lua
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 23 Jul 2014 15:08:09 +0200
parents a811bdf8b8eb
children b17b6bd59747
comparison
equal deleted inserted replaced
1051:92f4bf2c5d73 1052:cc4ff680e2a0
159 bool HttpClient::Apply(std::string& answer) 159 bool HttpClient::Apply(std::string& answer)
160 { 160 {
161 answer.clear(); 161 answer.clear();
162 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_URL, url_.c_str())); 162 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_URL, url_.c_str()));
163 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_WRITEDATA, &answer)); 163 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_WRITEDATA, &answer));
164
165 // Reset the parameters from previous calls to Apply()
164 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, NULL)); 166 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, NULL));
167 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPGET, 0L));
168 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POST, 0L));
169 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_NOBODY, 0L));
170 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, NULL));
171 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, NULL));
172 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, 0));
165 173
166 if (credentials_.size() != 0) 174 if (credentials_.size() != 0)
167 { 175 {
168 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_USERPWD, credentials_.c_str())); 176 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_USERPWD, credentials_.c_str()));
169 } 177 }
175 break; 183 break;
176 184
177 case HttpMethod_Post: 185 case HttpMethod_Post:
178 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POST, 1L)); 186 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POST, 1L));
179 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, pimpl_->postHeaders_)); 187 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, pimpl_->postHeaders_));
180 188 break;
189
190 case HttpMethod_Delete:
191 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_NOBODY, 1L));
192 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, "DELETE"));
193 break;
194
195 case HttpMethod_Put:
196 // http://stackoverflow.com/a/7570281/881731: Don't use
197 // CURLOPT_PUT if there is a body
198
199 // CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_PUT, 1L));
200
201 curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, "PUT"); /* !!! */
202 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, pimpl_->postHeaders_));
203 break;
204
205 default:
206 throw OrthancException(ErrorCode_InternalError);
207 }
208
209
210 if (method_ == HttpMethod_Post ||
211 method_ == HttpMethod_Put)
212 {
181 if (postData_.size() > 0) 213 if (postData_.size() > 0)
182 { 214 {
183 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, postData_.c_str())); 215 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, postData_.c_str()));
184 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, postData_.size())); 216 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, postData_.size()));
185 } 217 }
186 else 218 else
187 { 219 {
188 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, NULL)); 220 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, NULL));
189 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, 0)); 221 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, 0));
190 } 222 }
191 223 }
192 break; 224
193
194 case HttpMethod_Delete:
195 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_NOBODY, 1L));
196 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, "DELETE"));
197 break;
198
199 case HttpMethod_Put:
200 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_PUT, 1L));
201 break;
202
203 default:
204 throw OrthancException(ErrorCode_InternalError);
205 }
206 225
207 // Do the actual request 226 // Do the actual request
208 CheckCode(curl_easy_perform(pimpl_->curl_)); 227 CheckCode(curl_easy_perform(pimpl_->curl_));
209 228
210 long status; 229 long status;