2012-03-06 147 views
1

爲什麼我有時會出現這個錯誤?使用UserAgent時出現Curl 400錯誤

**Bad Request** 

Your browser sent a request that this server could not understand. 
Apache Server at control.digitalcoding.com Port 80 

$UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"; 

一切工作正常,但不能與

歌劇院/ 7.52(的Windows NT 5.1; U)[英文] 的Mozilla/5.0(窗口; U; Windows NT的5.1; rv:1.7.3)Gecko/20041001 Firefox/0.10.1 Mozilla/5.0(Windows NT 6.1; rv:10.0.1)Gecko/20100101 Firefox/10.0.1

例如。問題是什麼?

HtmlReciever.php

<?php 
if(empty($_GET["Link"])) 
{ 
    echo "empty"; 
    die; 
} 
$LinkToFetch = urldecode($_GET["Link"]); 
$UserAgent = urldecode($_GET["UserAgent"]); 


function iscurlinstalled() 
{ 
    if (in_array ('curl', get_loaded_extensions())) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

// If curl is instaled 
if(iscurlinstalled()==true) 
{ 
    $ch = curl_init($LinkToFetch); 
    curl_setopt($ch, CURLOPT_USERAGENT,$UserAgent); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true); 
    $HtmlCode = curl_exec($ch); 
    curl_close($ch); 
} 
else 
{ 

    $HtmlCode = file_get_contents($LinkToFetch); 
} 

echo $HtmlCode; 
?> 

我必須說,我從另一個.PHP運行RecieverHtml.php與得到這樣

http://127.0.0.1/reciever/RecieverHtml.php?Link=http%3A%2F%2Fwww.digitalcoding.com%2Ftools%2Fdetect-browser-settings.html&UserAgent=Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A10.0.1%29+Gecko%2F20100101+Firefox%2F10.0.1%0D%0A

回答

2

這取決於服務器上的請求被髮送到。如果服務器檢查用戶代理並僅允許匹配常見瀏覽器用戶代理的有限/不完整/過時列表的請求,則服務器可能會返回通用400狀態代碼。

如果您無法控制服務器並希望腳本正常工作,請使用可以工作的用戶代理並忘記其他人。您提供請求的用戶代理無論如何都是「錯誤的」,因爲它不是在執行實際請求的Chrome,而是您的服務器運行您的PHP腳本。

編輯: 您也可以通過通過使用下面的代碼請求你的PHP腳本的瀏覽器的用戶代理:

curl_setopt($ch, CURLOPT_USERAGENT, $_REQUEST['HTTP_USER_AGENT']); 

只要記住該值可能是空的或外來的(像。 Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1)並被服務器拒絕。

+0

那麼,您是否說我需要在Chrome中才能使用該腳本?這是不好的..以及如何通過修改我的腳本/服務器「欺騙」UserAgent?我有完全訪問權限。 – Master345 2012-03-06 23:14:25

+0

@RowMinds:你不需要在Chrome中「成爲」。當你通過上面提到的用戶代理(工作的那個)時,你實際上假裝是Chrome,甚至認爲你是一個PHP腳本。您可以通過僅使用Chrome發送的代理(如您已經做的),Firefox或任何您需要的瀏覽器來欺騙用戶代理。查看我的更新答案以獲取更多詳情。 – CodeZombie 2012-03-06 23:25:10

相關問題