【发布时间】:2016-01-03 23:03:39
【问题描述】:
[已解决] 我在 Ubuntu 14 上有一个 HBase 1.1.2 独立安装,我需要通过 REST 服务器通过 PHP POST 请求(由于长度限制我不能使用 GET)来检索和更新数据。我打算使用 curl PHP 对象,但我的问题是我不明白如何格式化要在 REST 服务器的 POST 中提交的请求(以 JSON 或 XML 格式)。
谁能帮帮我?
谢谢
让我添加我想用于所有请求的对象:按键获取行并设置\创建行。我的问题是如何根据不同的操作创建 $DATA 字段。
function method($method, $data=NULL, & $http_code, & $response)
{
$ch = curl_init();
if(isset($header))
{
curl_setop(CURLOPT_HTTPHEADER, $header);
}
curl_setopt($ch, CURLOPT_URL, "http://" . $GLOBALS['DBDW']['hostname'] . $GLOBALS['DBDW']['port']);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//nuovi
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept: application/json',
'Connection: ' . ( $this->options['alive'] ? 'Keep-Alive' : 'Close' ),
));
// fine nuovi
switch(strtoupper($method)){
case 'DELETE':
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
// i have to set CURLOPT_POSTFIELDS and if yes how?
break;
case 'POST':
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// how setting CURLOPT_POSTFIELDS and if yes how?
break;
case 'GET':
curl_setopt($curl, CURLOPT_HTTPGET, 1);
// i have to set CURLOPT_POSTFIELDS and if yes how?
break;
}
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$this->log(LOG_DEBUG, "HTTP code: " . $http_code, __FILE__, __LINE__, __CLASS__);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
curl_close($ch);
if ($response === false)
{
$this->log(LOG_ERR, "HTTP " . $method . " failed on url '" . $url . "'", __FILE__, __LINE__, __CLASS__);
$this->log(LOG_ERR, "cURL error: " . $curl_errno . ":" . $curl_error, __FILE__, __LINE__, __CLASS__);
$http_code=ERR_COMMUNICATION_FAILED;
return false;
}
return true;
}
【问题讨论】:
-
到目前为止你尝试过什么?分享一些代码。还是您希望从头开始编写代码?
-
是的,您的 php 代码中是否已经表示了数据?您有一些想要转移到 JSON 表示的变量?
-
这个所谓的 $DATA 变量在哪里?
-
$data 是我想用 Json 请求填充的变量。我不知道每种情况的要求是什么。
-
$DATA 与 $data 不同