Exemple #1
0
 /**
  * リクエストを実行する。
  * 
  * @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;
 }