/** * リクエストを実行する。 * * @param array $consumer_config Consumer設定 * @param OAuthToken $access_token AccessToken/Secret * @param string $method POST/GET * @param string $url URL * @param array $params パラメータ * @return HttpResponse */ public static function invoke($consumer_config, $access_token, $method, $url, $params = array()) { // consumer $consumer = OAuthWrapUtil::buildConsumer($consumer_config); // 署名方式はHMAC-SHA1 $signature_method = new OAuthSignatureMethod_HMAC_SHA1(); $redirect_limit = 10; $access_url = $url; while ($redirect_limit > 0) { $request = OAuthRequest::from_consumer_and_token($consumer, $access_token, $method, $access_url, $params); // 署名 $request->sign_request($signature_method, $consumer, $access_token); list($header, $body) = OAuthWrapUtil::http($request, $params); // HTTP ステータスコードを確認 $stat = explode(" ", $header); if ($stat[1] == "200") { return $body; } else { if ($stat[1] == "301" || $stat[1] == "302" || ($stat[1] = "303" || $stat[1] == "307")) { $redirect_limit = $redirect_limit - 1; $header_token = strtok($header, "\r\n"); while ($header_token !== false) { $tmp_line = $header_token; if (strpos($tmp_line, "Location:", 0) === 0) { $access_url = substr($tmp_line, strpos($tmp_line, "http")); break; } $header_token = strtok("\r\n"); } } else { break; } } } return NULL; }