首先,我查看了this问题并尝试了解决方案,但对我没有用。
我在PHP 7.0.22服务器上使用Zend 1.12。
我有一个功能,应该将数据发布到API并收到帖子的确认
每当我在我的休息客户端测试它时,在firefox中,我从API调用中得到这个响应:
"{\"code\":400,\"text\":\"Missing required parameters.\"}"
。
当我添加标题时:Content-Type: application/x-www-form-urlencoded
我得到了预期的响应:'200, true'
。但即使尝试在我的代码中明确设置此标头,它仍然总是返回400
。
控制器:
$params = array();
$params[ 'name' ] = 'John';
$params[ 'email' ] = 'john@example.com';
$client = new Zend_Http_Client();
$client->setUri( 'path/to/my/api' );
$client->setParameterPost( $params );
$response = client->request( Zend_Http_Client::POST );
var_dump( $response );
我曾尝试使用原始数据以及..
$params = array();
$params[ 'name' ] = 'John';
$params[ 'email' ] = 'john@example.com';
$params = json_encode( $params );
$client = new Zend_Http_Client();
$client->setUri( 'path/to/my/api' );
$client->setRawData( $params, 'application/json' );
$response = client->request( Zend_Http_Client::POST );
var_dump( json_decode( $response ) );
当我尝试使用我的API中的post参数转储$ request时(因为我自己编写了API),我发现这是null。就像没有发送$post
或没有实际传递数据一样。因为错误'缺少所需的参数'是不真实的,所有参数都设置好了(但可能没有正确传递/发送)。
有人可以告诉我我错过了什么吗?我整天都在这。 谢谢!
编辑(@shevron):
API期望参数通过url-encoded-form传递。在REST客户端Content-Type: application/x-www-form-urlencoded
中设置适当的标头会使API返回良好的响应。如果未添加此标头,则会收到错误消息。