2011-02-07 13 views
1

私はfopen、ファイル取得コンテンツおよびカールリクエストを使用しようとしましたが、私は常に400 Bad Requestを返します。これは、GETパラメータ付きの簡単なWebページリクエストです。ここに私のコードは、誰がなぜこれが問題を引き起こすのか分かりますか? phpinfo(); configがこれらの種類の要求を許可することを示しています。PHP Webページリクエストは400 Bad Requestを返します

function get_web_page($url) 
{ 
    $options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
    ); 

    $ch  = curl_init($url); 
    curl_setopt_array($ch, $options); 
$this->headers = array(
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8, image/gif, image/x-bitmap, image/jpeg, image/pjpeg', 
    'Connection: Keep-Alive', 
    'Content-type: application/x-www-form-urlencoded;charset=UTF-8' 
); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); 
    $content = curl_exec($ch); 
    $err  = curl_errno($ch); 
    $errmsg = curl_error($ch); 
    $header = curl_getinfo($ch); 
    curl_close($ch); 

    $header['errno'] = $err; 
    $header['errmsg'] = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 

....

 $forwardURL = '*****/receive?from='.$_GET["from"].'&msg='.$_GET['msg'].'&username='.$_GET['username'].'&ac_password='.$_GET['ac_password'].'&to='.$_GET['to'].'&do='.$_GET['do']; 
print_r($this->get_web_page($forwardURL)); 

私は私のブラウザに$ forwardURLを貼り付ける場合は、正常に動作します。

出力:

Array ([url] => http://************/receive?from=*****&msg=*********&username=*******&ac_password=*****&to=********&do=send [content_type] => text/html; charset=us-ascii [http_code] => 400 [header_size] => 179 [request_size] => 594 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.053303 [namelookup_time] => 0.000996 [connect_time] => 0.025709 [pretransfer_time] => 0.025711 [size_upload] => 0 [size_download] => 311 [speed_download] => 5834 [speed_upload] => 0 [download_content_length] => 311 [upload_content_length] => 0 [starttransfer_time] => 0.053264 [redirect_time] => 0 [errno] => 0 [errmsg] => [content] => 
Bad Request 

HTTP Error 400. The request is badly formed. 

) 

答えて

4

http_build_query$forwardURLを構築してみてください。

$forwardURL = '*****/receive?' . http_build_query(array(
    'from' => $_GET['from'], 
    'msg' => $_GET['msg'], 
    'username' => $_GET['username'], 
    'ac_password' => $_GET['password'], 
    'to' => $_GET['to'], 
    'do' => $_GET['do'], 
)); 

問題は、おそらくURLで特別な意味を持つエスケープ文字によるものです。 http_build_queryを安全にエスケープします。

+0

私のためにこれを調べてくれてありがとう!あなたはエスケープされていない文字について正しくありましたが、これが処理されている間に、要求を転送する前に正しく処理していませんでした。乾杯! – Chris

関連する問題