0
<?php
require_once 'Zend/Session/Namespace.php';
class ApiController extends Zend_Rest_Controller
    {
     public function init()
     {
     $this->_helper->layout->disableLayout();
     $this->_helper->viewRenderer->setNoRender(true);
     }
  public function indexAction()
     {
      $query=$this->getRequest()->getParam('query');
      $this->getResponse()
      ->appendBody("hi");
      $this->getResponse()->setHttpResponseCode(200);
     }
 public function getAction()
     {
     $query=$this->getRequest()->getParam('id');
     $this->getResponse()
          ->appendBody($query);
     }
 public function postAction()
     {
      $this->getResponse()
           ->setHttpResponseCode(200)
           ->appendBody("From postAction() creating the requested article");
     }
 public function putAction()
     {
      $this->getResponse()
           ->appendBody("From putAction() updating the requested article");
     }
 public function deleteAction()
     {
      $this->getResponse()
           ->appendBody("From deleteAction() deleting the requested article");
     } 
}

上記は、phpcurlから呼び出そうとしているRESTAPIですが、postメソッドを呼び出す方法がわかりません。また、RESTルートを使用してデフォルトモジュール\にブートストラップでエントリを作成しました。

これが私のコードの抜粋です:

<?php
    $ch = curl_init('http://apanel3.newfront.local/api');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 4);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT     5.1)");
    $curlresult = curl_exec($curl_connection);
    print_r($curlresult);
?>

次のcurlコードを使用してAPIを呼び出そうとしています。indexActionを呼び出しています。curlopt_postをtrueに設定したにもかかわらず、目的の出力が得られません。

4

1 に答える 1

0

php curl + post の例はたくさんあると思います。アクションにアクセスする方法を知っていますか (curl を使用せずに一般的に http 呼び出しを行います)。

これは、同様の質問へのリンクに対する別の回答です。

別の zend ベースのアプリケーションから API にアクセスしようとしていて、zend の組み込みメソッドを使用したい場合、特に curl アダプターを使用する場合は、Zend_Http_Clientに curl 用のアダプターがあることを確認する必要があります。

EDIT:

クライアント側で:

<?php

//
// A very simple PHP example that sends a HTTP POST to a remote site
//

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "'http://apanel3.newfront.local/api'");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "query='where post_parameter = query'");

// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec($ch);

curl_close($ch);

// further processing ....
if($server_output == 'OK') {
    echo 'Test passed';
} else {
    echo $server_output;
}
?>

indexAction の API 側:

public function indexAction()
    {
        $query=$this->getRequest()->getParam('query');
        if($this->getRequest()->isPost()) {

          // method == post, do your processing whatever required here ....

            $this->_forward('post',null,null,$query);
        } elseif ($this->getRequest()->getMethod() == 'GET') {
            // method == get
            $this->_forward('get',null,null,$query);
        }else {               
           // bad request response code 400

            $this->getResponse()
                ->appendBody("not a valid request");
            $this->getResponse()->setHttpResponseCode(400);
        }

    }

Edit:

Zend_Rest_Controller を拡張していることに気づかなかった私の間違いです。コントローラーのコードは問題ないようです。これで、PHP を介して curl リクエストを行うことについてはおそらくご存知でしょう。

PUTリクエストの作成方法については、この質問を確認してください

于 2013-03-15T14:31:31.133 に答える