2012-03-06 10 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 (윈도우 NT 5.1; U) [EN] 모질라/5.0 (윈도우, U, 윈도우 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; 
?> 

내가이 서버에 따라이

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 상태 코드를 반환 할 수 있습니다.

서버를 제어 할 수없고 스크립트가 작동되기를 원하는 경우 작동하는 사용자 에이전트를 사용하고 다른 것을 잊어 버리십시오. 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

그래, 내가 일하기 위해 그 스크립트를 실행할 때 크롬에 있어야한다고 말하는거야? 이것은 좋지 않습니다 .. 그리고 어떻게 내 스크립트/서버를 수정하여 UserAgent를 "스푸핑 (spoof)"시킬 수 있습니까? 나는 완전한 접근권을 가지고있다. – Master345

+0

@RowMinds : Chrome에서 '있어야'할 필요는 없습니다. 위에 언급 한 사용자 에이전트 (실제로 작동하는 사용자 에이전트)를 통과하면 실제로는 Chrome 인 것처럼 보이며 심지어 PHP 스크립트라고 생각합니다. 사용자 에이전트는 Chrome에서 보낸 (이미했던 것처럼), Firefox 또는 원하는 브라우저를 가져가는 것만으로도 위장 할 수 있습니다. 자세한 내용은 내 업데이트 답변을 참조하십시오. – CodeZombie

관련 문제