• Publicidad

Cómo hacer una petición REST con Mechanize

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Cómo hacer una petición REST con Mechanize

Notapor danimera » 2012-10-16 08:22 @390

Resulta que tengo que conectarme al API de Windows Live, y necesito hacer una petición REST tal como dicen aquí:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. POST https://login.live.com/oauth20_token.srf 
  2.  
  3. Content-type: application/x-www-form-urlencoded 
  4.  
  5. client_id=0005555555E1700&redirect_uri=http%3A%2F%2Fwww.contoso.com%2Fcallback.htm&client_secret=MdIepdjdfggd4sy8kzmHkU2VEKCLLo&code=2bd12503-7e88-bfe7-c5c7-82274a740ff&grant_type=authorization_code 


Honestamente no sé si lo que hice está bien pero en algún momento me funcionó:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         $mech->add_header( Encoding => 'application/x-www-form-urlencoded' );
  2.         $mech->post(
  3.                     'https://login.live.com/oauth20_token.srf',
  4.                     #$form
  5.                     Content => 'client_id=00000000440D53FB&redirect_uri=http://yakane.krebox.com/index.pl?mode=login&client_secret=pFZtOG42WCNiDlg5OkFWQGs56h0ItKD&code='.$self->session->param('wl_token').'&grant_type=authorization_code'
  6.                     );
  7.         my $content = $mech->content();
  8.         my $data = $self->dec_json($content);
  9.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


pero ahora que lo ejecuto tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. Error POSTing https://login.live.com/oauth20_token.srf: Bad Request at MyApp/MyBase.pm line 462.  
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Publicidad

Re: Cómo hacer una petición REST con Mechanize

Notapor explorer » 2012-10-16 09:47 @449

No sé de dónde viene el error. Quizás se pueda activar algún debug... O ver si hay algún detalle más que devuelva la petición e informe qué ha pasado.

El código se puede escribir mejor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         $mech->post(
  2.             'https://login.live.com/oauth20_token.srf',
  3.             [        #$form
  4.                 client_id     => '00000000440D53FB',
  5.                 redirect_uri  => 'http://yakane.krebox.com/index.pl?mode=login'
  6.                 client_secret => 'pFZtOG42WCNiDlg5OkFWQGs56h0ItKD',
  7.                 code          => $self->session->param('wl_token')
  8.                 grant_type    => 'authorization_code',
  9.             ]
  10.         );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
y aquí es donde surge la duda. ¿'client_secret' debe ser un parámetro POST más, o debe integrarse en la URL de 'redirect_uri'?

Una opción es sacar toda la petición POST a pantalla, para ver si es correcta.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Cómo hacer una petición REST con Mechanize

Notapor danimera » 2012-10-16 09:55 @455

Solucionado...

Ya confirmé que la petición mía está bien hecha. El problema era los datos que pasaba. Exactamente el parámetro

redirect_uri => 'http://yakane.krebox.com/index.pl?mode=login'

debía ser el mismo al que usé para obtener un código anteriormente.

Entonces lo escribí así de la forma que tu me indicas y funcionó perfecto. Así es más fácil de depurar que pasar toda esa cadena de una sola vez...

Gracias, explorer.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados