php curl enviando vars usando GET wierd results

Estou tentando chamar url em uma página em um site remoto. Decidiu usar curl. No site remoto, o url vars está sendo exibido como:

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

A url que está sendo chamada é:

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

Observe que não estou usando & na url, mas o pedido global tem, ou quase – tem amp; em vez de & e não & como eu usei !!! Não é que deveria ter algum deles.

O object Curl iniciou session em um formulário, configurou cookies, postou um formulário em outra página e agora este é o último link que eu devo seguir.

aqui está o php que estou usando:

  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); 

Eu corri outro pedido de curl depois disso e ainda estou logado, então o problema não é cookies. Como o último pedido (o formulário de login) usado $ _POST definiu o CURLOPT_POST para 0 e CURLOPT_HTTPGET para 1. Aqui está o resultado de $ info:

 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 ( ) ) 

Se eu copiar e passado $ info [‘url’] no navegador, ele funciona. Completamente perdido, horas perdidas no relógio, qualquer ajuda seria apreciada;)

Tente modificar seu código da seguinte maneira:

 $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); 

EDITAR

Função de codificação personalizada removida de acordo com o comentário de Brad – você não precisa disso, pois o PHP possui uma function de compilation que faz a mesma coisa.