How to send filters parameters in JSON request to HBase REST API?
I got the answer by other's hint:
<?php$headers = array( 'Accept: application/json', 'Content-Type: application/json',);if (!file_exists(__DIR__ . '/tmp')) { mkdir(__DIR__ . '/tmp', 0777);}$scannerFile = __DIR__ . '/tmp/scanner';if (!file_exists($scannerFile)) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://hbase_uri:20550/news/scanner"); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE); curl_setopt($ch, CURLOPT_USERPWD, ":"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array( 'batch' => 10, 'filter' => json_encode(array( 'type' => 'PrefixFilter', 'value' => 'u123', )), ))); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $page = curl_exec($ch); file_put_contents($scannerFile, $page); curl_close($ch);} else { $s = file_get_contents($scannerFile); $parts = explode('Location: http://hbase_uri:20550/news/scanner/', $s); $parts = explode("\n", $parts[1]); $parts[0] = trim($parts[0]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://hbase_uri:20550/news/scanner/" . $parts[0]); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE); curl_setopt($ch, CURLOPT_USERPWD, ":"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $page = curl_exec($ch); file_put_contents(__DIR__ . '/tmp/result', $page); curl_close($ch); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://hbase_uri:20550/news/scanner/" . $parts[0]); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_GSSNEGOTIATE); curl_setopt($ch, CURLOPT_USERPWD, ":"); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $page = curl_exec($ch); file_put_contents(__DIR__ . '/tmp/result_delete', $page); curl_close($ch);}
For the future visitors.
Using @kiang answer I have successfully made a CURL POST creating an scanner:
curl \ --verbose \ --request POST \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{"batch":10,"filter":"{\"type\":\"PrefixFilter\",\"value\":\"u123\"}"}' \ 'https://hbase:20550/namespace:table/scanner/'
This returned
Location -> Buffer(https://hbase:20550/namespace:table/scanner/151302168977413777789)...AhcWSResponse(StandaloneAhcWSResponse(201, Created))
What might be useful:
- Using those examples (you need to escape
"
signs) - Finding the docs of ScannerModel.