/** * Makes an HTTP request using PHP's CURL * * @param RESTian_Request $request * @param RESTian_Response $response * @return RESTian_Response */ function make_request($request, $response) { $ch = curl_init(); curl_setopt_array($ch, array(CURLOPT_URL => $request->get_url(), CURLOPT_USERAGENT => $request->client->get_user_agent(), CURLOPT_HTTPHEADER => $request->get_curl_headers(), CURLOPT_POST => false, CURLOPT_HEADER => false, CURLOPT_TIMEOUT => '30', CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => $request->sslverify, CURLOPT_SSL_VERIFYHOST => true === $request->sslverify ? 2 : false)); if (!$request->omit_body) { $response->body = trim(curl_exec($ch)); } $info = curl_getinfo($ch); $response->status_code = $info['http_code']; if (0 != curl_errno($ch)) { $response->set_http_error(curl_errno($ch), curl_error($ch)); } if (!$request->omit_result) { $response->result = (object) array('info' => $info, 'version' => curl_version(), 'error' => curl_error($ch), 'errno' => curl_errno($ch)); } curl_close($ch); return $response; }
/** * Makes an HTTP request using WordPress' WP_Http class and related functions. * * @param RESTian_Request $request * @param RESTian_Response $response * @return RESTian_Response */ function make_request($request, $response) { switch ($request->http_method) { case 'GET': $url = $request->get_url(); $args = $this->get_args($request); $result = wp_remote_get($url, $args); break; case 'POST': if ($content_type = $request->get_content_type()) { $request->add_header('Content-type', $content_type); } $url = $request->get_url(); $args = $this->get_args($request); $result = wp_remote_post($url, $args); break; case 'PUT': $result = new WP_Error(-1, 'HTTP PUT not yet supported.'); break; case 'DELETE': $result = new WP_Error(-2, 'HTTP DELETE not yet supported.'); break; } if (method_exists($request->client, 'filter_result')) { $result = $request->client->filter_result($result, $response); } if (is_wp_error($result)) { /** * These errors likely won't be 100% compatible with the errors from CURL when standalone */ $error_num = $result->get_error_code(); $response->set_http_error($error_num, $result->get_error_message($error_num)); } else { $response->message = wp_remote_retrieve_response_message($result); } $response->status_code = wp_remote_retrieve_response_code($result); $response->body = wp_remote_retrieve_body($result); $response->body = $request->client->apply_filters('result_body', $response->body, $response); $response->result = $result; return $response; }