簡體   English   中英

在沒有瀏覽器生成的用戶代理的情況下,如何通過 cURL 將事件數據發送到 Google Measurement Protocol?

[英]How can I send event data to Google Measurement Protocol via cURL without a browser generated user-agent?

我正在通過 Facebook 潛在客戶廣告生成潛在客戶。 我的服務器接受來自 Facebook 的 RTU,我可以根據需要將數據推送到我的 CRM。

我想在 Facebook 上填寫表格時向 GA 發送一個事件。

閱讀谷歌測量協議參考它指出:

user_agent_string – 是一個格式化的用戶代理字符串,用於計算以下維度:瀏覽器、平台和移動功能。

如果未設置此值,則不會計算上述數據。

我相信因為我試圖通過不涉及瀏覽器的 PHP webhook 腳本發送事件,所以請求失敗。

這是我正在運行的代碼的相關部分(我從 POST 更改為 GET 認為這可能是問題所在,一旦它工作,將其更改回 POST):

$eventData = [
      'v' => '1',
      't' => 'event',
      'tid' => 'UA-XXXXXXX-1',
      'cid' => '98a6a970-141c-4a26-b6j2-d42a253de37e',
      'ec' => 'my-category-here',
      'ea' => 'my-action-here',
      'ev' => 'my-value-here
  ];

  //Base URL for API submission
  $googleAnalyticsApiUrl = 'https://www.google-analytics.com/collect?';

  //Add vars from $eventData object
  foreach ($eventData as $key => $value) {
    $googleAnalyticsApiUrl .= "$key=$value&";
  }

  //Remove last comma for clean URL
  $googleAnalyticsApiUrl = substr($googleAnalyticsApiUrl, 0, -1);


  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $googleAnalyticsApiUrl);
  curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $response = curl_exec($ch);
  curl_close($ch);

我相信這是導致問題的用戶代理,就好像我手動將相同的 URL 放入瀏覽器中,而不是嘗試點擊,事件立即出現在 GA 的實時跟蹤中。

所述 URL 的示例是:

https://www.google-analytics.com/collect?v=1&t=event&tid=UA-XXXXX-1&cid=98a6a970-141c-4a26-b6j2-d42a253de37e&ec=my-category-here&ea=my-action-here&el=my-value-這里

我同時使用了 live 端點和 /debug/ 端點。 我的代碼不會毫無錯誤地提交給任何一個,但是如果我通過瀏覽器訪問相關的 URL,調試端點會說一切正常,然后在實時端點上,事件按預期到達 GA。

我知道curl_setopt($ch,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 正在嘗試發送瀏覽器的用戶代理,我嘗試用諸如

“Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36”

但它永遠不會被測量協議接受。

我的問題

  1. 我是否可以在不使用 web 瀏覽器的情況下將這些事件發送到 GA? 我曾經讓 Zapier 為我推送這些事件,所以我認為這是可能的。

  2. 如何通過 PHP 發送有效的 user_agent_string? 我試過用'CURLOPT_USERAGENT'來欺騙它,但從來沒有設法讓它們工作。

我遇到了同樣的問題:從我的瀏覽器中獲取收集 URL 就像一個魅力(我在實時視圖中看到了命中),但使用curlwget沒有。 在終端上,用httpie也戴上了。

我用 curl 發送了一個用戶代理curl ,這確實解決了這個問題。

所以我對@daveidivide 最后的評論感到困惑,他最初的假設是錯誤的(我的意思是,我知道他可能有兩個問題,但發送用戶代理 header 似乎是強制性的)。

根據我的經驗,谷歌分析只是避免跟蹤來自 cURL 或 wget(可能是其他人)的請求......也許是為了過濾掉不需要的噪音......? ♂️

任何包含字符串"curl"的用戶代理請求都不會被跟蹤。 將 User-Agent header 覆蓋到幾乎所有其他內容,GA 將對其進行跟蹤。

如果您在使用 cURL 時忽略了覆蓋 User-Agent header,它將包含一個默認的 header 標識自己......並且 GA 將忽略該請求。

當使用像 Guzzle 這樣的package時也是這種情況,它還包括自己的默認用戶代理字符串(例如"GuzzleHttp/6.5.5 curl/7.65.1 PHP/7.3.9" )。

只要您提供自己的自定義 User-Agent header,GA 應該會選擇它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM