使用 PHP cURL 和 Symfony 1.4.2
我正在尝试执行包含数据 (JSON) 的 PUT 请求以修改我的 REST Web 服务中的对象,但无法在服务器端捕获数据。
检查我的日志时,似乎内容已成功附加:
PUT to http://localhost:8080/apiapp_test.php/v1/reports/498 with post body content=%7B%22report%22%3A%7B%22title%22%3A%22The+title+has+been+updated%22%7D%7D
我附上了这样的数据:
$curl_opts = array(
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => http_build_query(array('content' => $post_data)),
);
并想使用这样的东西来获取数据
$payload = $request->getPostParameter('content');
它不起作用,我尝试了很多方法来在我的操作文件中获取这些数据。我尝试了以下解决方案:
parse_str(file_get_contents("php://input"), $post_vars);
$payload = $post_vars['content'];
// or
$data = $request->getContent(); // $request => sfWebRequest
$payload = $data['content'];
// or
$payload = $request->getPostParameter('content');
// then I'd like to do that
$json_array = json_decode($payload, true);
我只是不知道如何在我的行动中获取这些数据,这令人沮丧,我在这里阅读了很多关于它的主题,但没有一个对我有用。
附加信息:
我为我的 cURL 请求设置了这些设置:
curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, $http_method);
if ($http_method === sfRequest::PUT) {
curl_setopt($curl_request, CURLOPT_PUT, true);
$content_length = array_key_exists(CURLOPT_POSTFIELDS, $curl_options) ? strlen($curl_options[CURLOPT_POSTFIELDS]) : 0;
$curl_options[CURLOPT_HTTPHEADER][] = 'Content-Length: ' . $content_length;
}
curl_setopt($curl_request, CURLOPT_URL, $url);
curl_setopt($curl_request, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($curl_request, CURLOPT_TIMEOUT, 4);
curl_setopt($curl_request, CURLOPT_DNS_CACHE_TIMEOUT, 0);
curl_setopt($curl_request, CURLOPT_NOSIGNAL, true);
curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, true);
在 sfWebRequest.php 中,我看到了这个:
case 'PUT':
$this->setMethod(self::PUT);
if ('application/x-www-form-urlencoded' === $this->getContentType())
{
parse_str($this->getContent(), $postParameters);
}
break;
所以我尝试将标题的 Content-Type 设置为它,但它没有做任何事情。
如果您有任何想法,请帮助!