2012-04-19 13 views
0

私はリモートサイトのページでURLを呼び出そうとしています。カールの使用を決定しました。 URLのVARSのように表示されているリモートサイト上:URLが呼び出されているPHPカールGET wierdの結果を使用してvarsを送信

$_REQUEST Array 
(
    [var1] => val1 
    [amp;var2] => val2 
    [amp;var3] => val3 
) 

です、私はURLで&を使用していないんだけど、世界的な要求はそれを持っていることを

http://site.com/controller/action.php?var1=val1&var2=val2&var3=val3 

お知らせまたはほぼ - それは&の代わりにamp;であり、私が使用したように&ではありません!それはそれらのいずれかを持つべきではない。

curlオブジェクトはフォームにログインし、Cookieを設定し、別のページにフォームを投稿しました。これは私が最後に必要なリンクです。ここ

は、私が使用しているPHPです:

curl_setopt($this->ch, CURLOPT_URL, "http://site.com/controller/action.php?var1=val1&var2=val2&var3=val3"); 
    curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($this->ch, CURLOPT_REFERER, "http://site.com/"); 
    curl_setopt($this->ch, CURLOPT_VERBOSE, 1); 
    curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookie); 
    curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookie); 
    curl_setopt($this->ch, CURLOPT_POST, 0); 
    curl_setopt($this->ch, CURLOPT_HTTPGET, 1); 
    $output = curl_exec($this->ch); 
    $info = curl_getinfo($this->ch); 

私はこの後、別のカールの要求を走っていると私はまだその問題はクッキーではありませんログインしています。

info Array 
(
    [url] => http://site.com/controller/action.php?var1=val1&var2=val2&var3=val3 
    [content_type] => text/html; charset=utf-8 
    [http_code] => 403 
    [header_size] => 403 
    [request_size] => 541 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 0.781186 
    [namelookup_time] => 3.7E-5 
    [connect_time] => 3.7E-5 
    [pretransfer_time] => 4.2E-5 
    [size_upload] => 1093 
    [size_download] => 3264 
    [speed_download] => 4178 
    [speed_upload] => 1399 
    [download_content_length] => 3264 
    [upload_content_length] => 0 
    [starttransfer_time] => 0.781078 
    [redirect_time] => 0 
    [certinfo] => Array 
     (
     ) 

) 

私はコピーした場合、過去$情報[」:最後の要求(ログインフォーム)が0にCURLOPT_POSTと1 にCURLOPT_HTTPGETを設定していています$ _POSTを使用しているのでここでは$先からの出力がありますurl ']をブラウザに入力します。完全クロックに失われた時間は、任意の助けをいただければ幸いです、失われた;)

+0

.... $ _GET []または$ _REQUEST []で$ var2が見つからないため、http 403が自分のコードから発生しています –

答えて

1

は、次のようにコードを変更してみてください。

$data = array('val1'=>"val1", 'val2'=>"val2", 'val3'=>"val3"); 
curl_setopt($this->ch, CURLOPT_URL, "http://site.com/controller/action.php"); 
curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($this->ch, CURLOPT_REFERER, "http://site.com/"); 
curl_setopt($this->ch, CURLOPT_VERBOSE, 1); 
curl_setopt($this->ch, CURLOPT_COOKIEJAR, $this->cookie); 
curl_setopt($this->ch, CURLOPT_COOKIEFILE, $this->cookie); 
curl_setopt($this->ch, CURLOPT_POST, 0); 
curl_setopt($this->ch, CURLOPT_HTTPGET, 1); 
$output = curl_exec($this->ch); 
$info = curl_getinfo($this->ch); 

EDIT

はブラッドさんのコメントどおりカスタムエンコード機能を削除します - PHPは同じことをする組み込み関数を持っているので、あなたはそれを必要としません。

+0

なぜ 'http_build_query()'が動作するときに独自のエンコード関数を記述しますかちょうどいい? – Brad

+0

私が作業している現在のコードベースからこの関数を取得しただけで、元の開発者がなぜこのように記述したのかは実際考えられません。私はそれを反映するために私の答えを更新しました。 – Elie

+0

これは投稿のように見えますが、オペラは欲しいと思っていますか? – ladieu

関連する問題