Я новичок в PhP и пытаюсь сделать запрос к стороннему API с помощью curl. Это то, что я пытаюсь, но он просто отвечает тем, что находится в корневой конечной точке API.
$service_url = 'http://api.kivaws.org/graphql';
$curl = curl_init($service_url);
$curl_post_data = array(
'Pragma' => 'no-cache',
'Origin' => 'http://api.kivaws.org',
'Accept-Encoding' => 'gzip, deflate',
'Accept-Language' => 'en-US,en;q=0.8',
'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'content-type' => 'application/json',
'accept' => 'application/json',
'Cache-Control' => 'no-cache',
'Connection' => 'keep-alive',
'data' => '{"query":"{
loans (filters: {gender: male, status:funded, country: [\"KE\", \"US\"]}, sortBy: newest, limit: 2) {
totalCount
values {
name
status
loanAmount
}
}
}","variables":null,"operationName":null}'
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
$curl_response = curl_exec($curl);
if ($curl_response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additioanl info: ' . var_export($info));
}
curl_close($curl);
echo $curl_response;
Это, кажется, делает свое дело: использование curl_setopt
установить несколько важных вещей, таких как CURLOPT_HTTPHEADER
, CURLOPT_RETURNTRANSFER
в True
так что он вернет нам результат в теле, а затем закодирует запрос с помощью json_encode
,
$service_url = 'http://api.kivaws.org/graphql';
$curl = curl_init($service_url);
$curl_post_data = array("query" => '{loans (filters: {gender: male, status:funded, country: ["KE", "US"]}, sortBy: newest, limit: 2) {totalCount values { name status loanAmount }}}');
$data_string = json_encode($curl_post_data);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$curl_response = curl_exec($curl);
if ($curl_response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additioanl info: ' . var_export($info));
}
curl_close($curl);
echo $curl_response;
echo $info;
Это возвращает меня:
{"data":{"loans":{"totalCount":40425,"values":[{"name":"Davis","status":"funded","loanAmount":"100.00"},{"name":"James","status":"funded","loanAmount":"100.00"}]}}}
Других решений пока нет …