通过CURL使PHP POST JSon请求使用PHP
[已解决]我在Ubuntu 14上有一个HBase 1.1.2独立安装,我需要通过PHP POST请求检索和更新数据(由于长度限制,我无法使用GET )通过REST服务器。我打算使用curl PHP对象,但我的问题是我不明白如何格式化请求(使用JSON或XML),以便在POST服务器上提交POST请求。通过CURL使PHP POST JSon请求使用PHP
谁能帮助我?
感谢
让我补充我的目标我想用所有的要求:通过按键,并设置\创建行获得行。我的问题是如何根据不同的操作制作$ 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;
}
CURLOPT_POSTFIELDS
如果你使用后,才需要,所以你的switch/case是正确的,因为是。
如果您想要发出GET请求,您只需将GET内容追加到网址中,就像您在浏览器中看到的一样。该功能适用于此目的:http_build_query
。
// define the url in a variable above the switch
$url = "http://" . $GLOBALS['DBDW']['hostname'] . $GLOBALS['DBDW']['port'];
switch(strtoupper($method)){
case 'DELETE':
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
// append the GET parameters if any
if(!empty($data)) $url .= "?".http_build_query($data);
break;
case 'POST':
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case 'GET':
curl_setopt($curl, CURLOPT_HTTPGET, 1);
// append the GET parameters if any
if(!empty($data)) $url .= "?".http_build_query($data);
break;
}
// move this line below the switch
curl_setopt($ch, CURLOPT_URL, $url);
This is the function I use for cURL stuff。如果你愿意,你可以参考它(或使用它)。
亲爱的Pamblam,谢谢你的回复。我真正的问题是我不知道我必须使用什么Json语义来通过hbase获取数据或将行添加到hbase中。任何建议? – omambe
亲爱的老兄,我不知道帽子hbase是,所以没有建议在这个时候 –
你到目前为止尝试过什么?分享一些代码。还是你期望从头开始编写代码? – taxicala
是的,数据是否已经在你的php代码中表现出来了?你有一些你想转移到JSON表示的变量? –
这个所谓的$ DATA var在哪里? –