PHP-Curl-Anfrage-API
P粉311089279
2023-08-13 18:12:22
<p>Ich habe eine Funktion, die die API mithilfe von JavaScript aufruft, und sie funktioniert einwandfrei: </p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">var headers = {
Autorisierung: „Bearer“ + MY_ACCESS_TOKEN
};
var requestParams = {
Methode: „POST“,
contentType: „application/json“,
Überschriften: Überschriften,
Nutzlast: JSON.stringify({
query: 'query {adSet(id: "' + MY_ADSET_ID + '") {insights(timeRange: {from: "2023-08-01T00:00:00Z", bis: "2023-08-10T23:59:59Z" }timeIncrement: DAILY) {timestamps reporting {Impressions Conversions offerwallImpressions offerwallAverageRank spend}}}}'
})
var Response = UrlFetchApp.fetch(MY_API_ENDPOINT, requestParams);
var data = JSON.parse(response);</pre>
<p><br /></p>
<p>Wenn ich versuche, dies in PHP zu konvertieren, erhalte ich nur eine leere Antwort von der API. Was habe ich falsch gemacht? </p><p>
Bitte beachten Sie, dass es einwandfrei funktioniert, wenn ich my_curl() verwende, um $MY_ACCESS_TOKEN von der API abzurufen. </p>
<pre class="brush:php;toolbar:false;">$postdata = json_encode('query: query {adSet(id: "' . $MY_ADSET_ID . '") {insights(timeRange: {from: "2023 -08-01T00:00:00Z", bis: "2023-08-10T23:59:59Z"} timeIncrement: DAILY) {timestamps reporting {impressions Conversions offerwallImpressions offerwallAverageRank spend}}}}');
$endpoint = $MY_API_ENDPOINT;
$headers = Array (
„Inhaltstyp: application/json“,
„Autorisierung: Inhaber“ $MY_ACCESS_TOKEN,
$postdata
);
$data = my_curl ($endpoint, $headers);
var_dump ($data);
Funktion my_curl ($endpoint, $headers) {
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_URL, $endpoint);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close ($ch);
$json = json_decode ($server_output, true);
return ($json);
}
</pre>
<p><br /></p>
当使用json_encode时,应该提供一个关联数组或一个要编码为JSON的对象,而不是一个字符串。在你的情况下,你提供了一个字符串,你在$headers数组中混合了头部和post数据。我已经添加了缺失的CURLOPT_POSTFIELDS选项,以便在cURL请求中包含JSON编码的post数据,使API能够正确接收查询。