Foros del Web » Programando para Internet » PHP »

Problema con php y curl y twitter

Estas en el tema de Problema con php y curl y twitter en el foro de PHP en Foros del Web. Hola! Estoy haciendo una clase para manejar twitter y tengo los siguientes codigos: Código PHP: public function  _peticionHTTP ( $metodo = 'post' , $url , $parametros ...
  #1 (permalink)  
Antiguo 08/02/2012, 09:12
 
Fecha de Ingreso: julio-2006
Mensajes: 96
Antigüedad: 17 años, 9 meses
Puntos: 2
Problema con php y curl y twitter

Hola!

Estoy haciendo una clase para manejar twitter y tengo los siguientes codigos:

Código PHP:
public function _peticionHTTP($metodo='post',$url,$parametros,$cabecera,$return=true){
       
       
//-- Normalizo el parametro $metodo
       
$metodo=strtolower($metodo);
       
       
//-- Creo el recurso curl y lo configuro
       
$ccurl_init();
       
curl_setopt($c,CURLOPT_URL,$url);
       
       
//-- Configuro la cabecera si $cabecera es distinto de null
       
if($cabecera!==NULL){
         
curl_setopt($c,CURLOPT_HTTPHEADER,array($cabecera,'Expect: '));
       }  
        
       
curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false);
       
curl_setopt($c,CURLOPT_RETURNTRANSFER,$return);  
            
       
       
//-- Configuro el metodo
       
if($metodo=='post'){
         
curl_setopt($c,CURLOPT_POST,true);
         
curl_setopt($c,CURLOPT_POSTFIELDS,$parametros);
       }else{
         
curl_setopt($c,CURLOPT_POST,false);
       }          
       
       
//-- Ejecuto la petición
       
$exe curl_exec($c);
       
       
//-- Obtengo el codigo de operación si es 200 retorno la respuesta si return = true
       
$codigo_resp=curl_getinfo($c,CURLINFO_HTTP_CODE);
       if(
$codigo_resp==200){
         if(
$return==TRUE){
            return 
$exe;
         }
       }else{
         
         echo 
$codigo_resp;
       } 
este codigo al llamarlo con sus respectivos valores me devuelve un 401 desde twitter , es decir error pero si uso este codigo:

Código PHP:
 //--  Configuro la petición post
    
$curl curl_init();

       
curl_setopt($curlCURLOPT_URL'https://api.twitter.com/oauth/access_token');
        
curl_setopt($curlCURLOPT_HTTPHEADER, array($cabeceras'Expect: '));
       
curl_setopt($curlCURLOPT_HEADERfalse);
       
curl_setopt($curlCURLOPT_RETURNTRANSFERtrue); 
      
curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
      
curl_setopt($curlCURLOPT_POSTtrue);
       
curl_setopt($curlCURLOPT_POSTFIELDS$parametros);

  
//-- Ejecutamos la petición
      
$respuesta curl_exec($curl); 
La llamada la función anterior (_peticionHTTP) es correcta , con los parámetros que requiere pero sin embargo me devuelve un 401 , cuando el ultimo código que publique me devuelve un 200 OK , alguien ve alguna diferencia entre ambos códigos más allá de la estructura? es decir una diferencia que pueda generar dicho error?.

Saludos
  #2 (permalink)  
Antiguo 14/02/2012, 01:50
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Problema con php y curl y twitter

No conozco Twiter ni mucho curl, pero en el segundo código utilizas la variable $cabeceras y en la función siempre te refieres a $cabecera. Tal vez te sirva, saludos
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 14/02/2012, 03:02
Avatar de PC-Drivers
Usuario no validado
 
Fecha de Ingreso: febrero-2003
Mensajes: 104
Antigüedad: 21 años, 2 meses
Puntos: 1
Respuesta: Problema con php y curl y twitter

Código PHP:
public function _peticionHTTP($metodo='post'$url$parametros$cabecera$respuesta=true){
       
       
//-- Normalizo el parametro $metodo (Innecesario)
       //$metodo=strtolower($metodo);
       //-- Creo el recurso curl y lo configuro
       
$c curl_init();
       
curl_setopt($cCURLOPT_URL$url);
       
       
//-- Configuro la cabecera si $cabecera es distinto de null
       // "Content-Type: text/xml; charset=utf-8"
       // Yo prefiero mandar un array directamente
       
if($cabecera){
        
curl_setopt($c,CURLOPT_HTTPHEADER,array($cabecera,'Expect: '));
       }
       
       
curl_setopt($c,CURLOPT_SSL_VERIFYPEER,false);
       
curl_setopt($c,CURLOPT_RETURNTRANSFER,$return);  
            
       
       
//-- Configuro el metodo
       
if($metodo=='post'){
         
curl_setopt($c,CURLOPT_POST,true);
         
curl_setopt($c,CURLOPT_POSTFIELDS,$parametros);
       }else{
         
curl_setopt($c,CURLOPT_POST,false);
       }          
       
       
//-- Ejecuto la petición
       
$exe curl_exec($c);
       
       
//-- Obtengo el codigo de operación si es 200 retorno la respuesta si return = true
       
$codigo_resp curl_getinfo($cCURLINFO_HTTP_CODE);
       if(
$codigo_resp==200&&){
          if(
$respuesta){
              return 
$exe;
          } else {
              return 
true;
          }
       }
       else
       {
              return 
$codigo_resp;
       }

Pruebate esto, aunque yo prefiero enviar las cabeceras como array directamente, o bien enviar un array e incorporarlo con un for con las opciones que siempre vallas a añadir.
Lo he probado y me tira bien para hacer peticiones como login de twitter, etc..

Última edición por PC-Drivers; 14/02/2012 a las 03:05 Razón: Add coments

Etiquetas: twitter
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:58.