2017-09-13 71 views
0

我有一個簡單的PHP腳本,它向用戶顯示一些信息。如果使用cURL請求同一頁面或使用Wget保存,我希望儘可能縮短此信息。如果用cURL或Wget訪問頁面,用PHP檢測

我在Stackoverflow上看到了幾個類似的問題,但他們有一些額外的東西,如「I want to block cURL」或「如果...重定向表單請求」。答案通常表明無法可靠地檢測到cURL請求,因爲cURL允許用戶更改所有請求參數並假裝爲瀏覽器。多數民衆贊成在我看來,我不想阻止捲曲,我想提供一個額外的服務,爲通用cURL(和Wget)請求。

+0

如果您的用戶足夠聰明以實現自動化,那麼請爲此提供一個不同的URL?即通過提供API來分開用於人類消費的頁面和用於軟件消費的頁面。 –

+0

他不應該被要求足夠聰明;)一個示例服務是ifconfig.io→通過瀏覽器請求:很多信息。通過cURL請求:僅限IP地址。我想要達到相同的有用行爲。 – pixelbrackets

回答

2

如果沒有配置,cURL和Wget會爲其請求使用自定義»用戶代理«字符串。例如,curl/7.47.0Wget/1.17.1 (linux-gnu)。你可以在https://requestb.in上測試這個easiliy。

幾個應用程序可能會訪問請求標頭中的用戶代理字符串。在PHP中,它可用於$_SERVER['HTTP_USER_AGENT']變量。

所以檢測捲曲或Wget的請求,並提供不同的內容,你可以使用

<?php 

// Catch cURL/Wget requests 
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/^(curl|wget)/i', $_SERVER['HTTP_USER_AGENT'])) { 
    echo 'Hi curl user!'; 
} 
else { 
    echo 'Hello browser user!'; 
} 

?> 

在我的應用我發現捲曲請求,然後讓在if循環過程die()。所以如果它只是一個瀏覽器,條件不匹配並執行下面的所有PHP代碼。

如前所述,cURL和Wget都允許用戶設置一個任意的用戶代理。但對於所要求的服務,此解決方案已足夠。