0

我正在尝试向 api 发送一个简单的发布请求以下载报告。

并收到一条 411 错误消息,上面写着“POST 请求需要内容长度标头。这就是我们所知道的。”

我在这里使用示例。 https://code.google.com/p/google-api-adwords-php/wiki/NoClientLibrary

还尝试了新的 api url https://adwords.google.com/api/adwords/cm/v201309

有没有人遇到过这个?有任何想法吗?

谢谢!

<?php
// Provide header information.
$authToken = 'INSERT_AUTH_TOKEN_HERE';
$clientCustomerId = 'INSERT_CLIENT_CUSTOMER_ID_HERE';
$developerToken = 'INSERT_DEVELOPER_TOKEN_HERE';

// Create report definition XML.
$reportDefinition = <<<EOT
<reportDefinition xmlns="https://adwords.google.com/api/adwords/cm/v201109">
  <selector>
    <fields>CampaignId</fields>
    <fields>Id</fields>
    <fields>Impressions</fields>
    <fields>Clicks</fields>
    <fields>Cost</fields>
    <predicates>
      <field>Status</field>
      <operator>IN</operator>
      <values>ENABLED</values>
      <values>PAUSED</values>
    </predicates>
  </selector>
  <reportName>Custom Adgroup Performance Report</reportName>
  <reportType>ADGROUP_PERFORMANCE_REPORT</reportType>
  <dateRangeType>LAST_7_DAYS</dateRangeType>
  <downloadFormat>CSV</downloadFormat>
</reportDefinition>
EOT;

// Create parameters.
$params = array('__rdxml' => $reportDefinition);

// Create headers.
$headers = array();
$headers[]= 'Authorization: GoogleLogin auth=' . $authToken;
$headers[]= 'clientCustomerId: ' . $clientCustomerId;
$headers[]= 'developerToken: ' . $developerToken;
$headers[]= 'content-length: ' . trim(strlen(print_r($params, true)));
$headers[]= 'Content-Type: application/x-www-form-urlencoded';

$downloadPath = 'report.csv';
$url = 'https://adwords.google.com/api/adwords/reportdownload/v201109';

$file = fopen($downloadPath, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $file);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
fclose($file);

if ($code == 200) {
  printf("Report downloaded to: %s\n", $downloadPath);
} else {
  $file = fopen($downloadPath, 'r');
  $error = fread($file, 1024);
  fclose($file);
  printf("Error: %s\n", $error);
}
4

0 回答 0