0

我通常使用 curl 来调用 rest api 像这样

$user_data = array("userName" => "myuser@mydomain.com" ,"password" => "mydomain123" );
$data = json_encode($user_data);
$headers = array('Accept: application/json', 'Content-Type: application/json',);
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, 'http://myursl.com/myapi/v1/Api.svc/something/someother');
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($handle);
$code = curl_getinfo($handle, CURLINFO_HTTP_CODE);
curl_close($handle);
print_r($response);

上面的代码在 API 上运行良好并打印了预期的响应,当我使用 Zend Framework 的 Zend_Rest_client 做同样的事情时

像这样

$base_url = 'http://myursl.com/myapi/v1_0/Api.svc';
$endpoint = '/something/someother';
$user_data = array("userName" => "myuser@mydomain.com" ,"password" => "mydomain123" );
$client = new Zend_Rest_Client($base_url);
$response = $client->restPost($endpoint, $user_data);

我收到这样的 404 错误

(Zend_Http_Response)#62 (5) { ["version":protected]=> string(3) "1.1" ["code":protected]=> int(404) ["message":protected]=> string(9) "Not Found"] }

实际上我在实现 Zend Rest Client 时错在哪里

提前感谢您回复此帖子

4

1 回答 1

0

虽然它可能不是最好的解决方案,但我最终还是继承了 Zend_Rest_Client 并重写了 _performPost() ,如下所示:

class My_Rest_Client extends Zend_Rest_Client {
    protected function _performPost($method, $data = null)
    {
        $client = self::getHttpClient();
        if (is_string($data)) {
            $client->setRawData($data, 'application/json');
        } elseif (is_array($data) || is_object($data)) {
            $client->setParameterPost((array) $data);
        }
        return $client->request($method);
    }
}

接着:

$rest = new My_Rest_Client('http://my.rest.url');
$rest->restPost('post-path', $data);
于 2014-03-19T16:12:05.657 回答