2012-03-06 42 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)[EN] のMozilla/5.0(Windowsの; U; Windows NTのMozilla/5.0(Windows NT 6.1; rv:10.0.1)Gecko/20100101 Firefox/10.0.1

たとえば、Gecko/20041001 Firefox/0.10.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; 
?> 

私は私がこの

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

のようにGETして、別の.phpからRecieverHtml.phpを実行している。これは、サーバーあなたに依存していることを言わなければなりませんリクエストはに送信されます。サーバーがユーザーエージェントをチェックして、一般的なブラウザーユーザーエージェントの制限付き/不完全/古いリストと一致する要求のみを許可する場合、サーバーは汎用400状況コードを返す可能性があります。

サーバを制御しておらず、スクリプトを動作させたい場合は、動作するユーザエージェントを使用し、他のサーバを忘れてしまいます。あなたのリクエストに提供するユーザーエージェントは、実際のリクエストを行っているのではなく、PHPスクリプトを実行しているサーバーであるため、とにかく「間違っています」。

EDIT: あなたはまた、次のコードを使用して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

+0

@RowMinds:あなたはChromeの中にいる必要はありません。あなたが実際にあなたがPHPスクリプトであると思っていても、あなたが実際にChromeであるふりをする上記の(あなたが動作する)上記のユーザエージェントを渡すとき。ユーザーエージェントは、Chromeから送信されたもの(既に行ったように)、Firefox、または必要なブラウザを使用するだけで偽装することができます。詳細については、私の更新答えを見てください。 – CodeZombie

関連する問題