2013-03-21 69 views
5

我有一段代碼,旨在接收任何網址並從網上撕掉它。到目前爲止,它一直工作正常,直到有人給了這個網址:無法捲曲遠程文件

http://www.aspensurgical.com/static/images/aspen_hill-rom_logo.png

如果我打它從我的瀏覽器,它顯示就好了。但是,當我試着捲曲下來,我得到:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>403 Forbidden</title> 
</head><body> 
<h1>Forbidden</h1> 
<p>You don't have permission to access /static/images/aspen_hill-rom_logo.png 
on this server.</p> 
<hr> 
<address> Server at www.aspensurgical.com Port 80</address> 
</body></html> 

我使用捲曲代碼:

$ch = curl_init(str_replace(' ', '%20', $url)); 
$fh = fopen($local_file, "w"); 
curl_setopt($ch, CURLOPT_FILE, $fh); 
curl_exec($ch); 
curl_close($ch); 

是他們的服務器在某種程度上意識到我不是一個正常的瀏覽器,並引導我?

回答

8

他們有useragent檢查,看看你是誰。添加普通瀏覽器的useragent,你應該沒問題。

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0"); 

這是codepad中的工作示例。

+2

先生,你應該有一個偉大的大餅乾。萬分感謝! – Anthony 2013-03-21 06:08:56

+1

你能解釋一下useragent,那麼Chrome,safari和其他瀏覽器呢,爲什麼我們需要添加它們呢? – Naeem 2013-03-21 06:11:37

+0

@Naeem每個瀏覽器都會發送自己的用戶代理字符串來標識自己。常見的搜索引擎機器人在用戶代理字符串中顯示他們工作的搜索引擎。這就是爲什麼一些網站挖掘這個字符串來查看誰請求頁面。 – Ranty 2013-03-21 06:13:30

1

某些服務器爲了阻止不必要的流量,只允許從瀏覽器進行任何下載。因此,爲了欺騙這些服務器,curl有一個額外的選項 - 用戶代理,這是個訣竅!

我使用curl從我的windows7 PC上安裝了gow。

curl --user-agent "Mozilla/4.0" http://www.example.com/archives/abc.txt --output pqr.txt