通过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; 
} 
+0

你到目前为止尝试过什么?分享一些代码。还是你期望从头开始编写代码? – taxicala

+0

是的,数据是否已经在你的php代码中表现出来了?你有一些你想转移到JSON表示的变量? –

+0

这个所谓的$ DATA var在哪里? –

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。如果你愿意,你可以参考它(或使用它)。

+0

亲爱的Pamblam,谢谢你的回复。我真正的问题是我不知道我必须使用什么Json语义来通过hbase获取数据或将行添加到hbase中。任何建议? – omambe

+0

亲爱的老兄,我不知道帽子hbase是,所以没有建议在这个时候 –