2010-09-03 11 views
6

Zbudowałem serwer REST, a teraz chcę go szybko przetestować z klienta Perl, używając modułu REST :: Client.Perl: Programowo ustawiony parametr POST za pomocą REST :: Moduł klienta

Działa poprawnie, jeśli wykonuję żądanie GET (jawnie ustawiając parametry w adresie URL), ale nie mogę wymyślić, jak ustawić te parametry w żądaniach POST.

ten sposób mój kod wygląda następująco:

#!/usr/bin/perl 
use strict; 
use warnings; 

use REST::Client; 

my $client = REST::Client->new(); 

my $request_url = 'http://myHost:6633/my_operation'; 

$client->POST($request_url); 
print $client->responseContent(); 

Próbowałem coś podobnego do:

$client->addHeader ('my_param' , 'my value'); 

Ale to oczywiście błędne, ponieważ nie chcę, aby ustawić HTTP predefiniowanego Nagłówek, ale parametr żądania.

Dziękujemy!

Odpowiedz

5

to całkiem prosto do przodu . Musisz jednak wiedzieć, jakiego rodzaju treści oczekuje serwer. Zazwyczaj będzie to XML lub JSON.

F.ex. działa to z serwerem, który może zrozumieć JSON w drugim parametrze, jeśli powiesz mu, co znajduje się w nagłówku w trzecim parametrze.

$client->POST('http://localhost:3000/user/0/', '{ "name": "phluks" }', { "Content-type" => 'application/json'}); 
+1

Dzięki za to. Właśnie zmarnowałem godzinę mojego życia - Dokumenty REST :: Client faktycznie mówią, aby wywołać żądanie POST, używając tablicy arrayref dla body & headers, co nie jest poprawne! 'POST ($ url, [$ body_content,% $ nagłówków])' – user1027562

+1

Myślę, że mają na myśli [] być "opcjonalne", co jest standardowym językiem uniksowym. –

0

ja nie używałem modułu odpoczynek, ale patrząc na POST function, akceptuje parametr zawartości ciała, spróbuj utworzyć ciąg parametrów i wysłać, że wewnątrz funkcji

$client->POST($request_url, "my_param=my+value"); 
print $client->responseContent(); 
4

Moduł REST przyjmuje parametr zawartości ciała, ale okazało się, że praca z szeregiem parametrów, trzeba ustawić odpowiedni typ zawartości.

więc następujący kod działa dla mnie:

$params = $client->buildQuery([username => $args{username}, 
      password => $args{password}]); 

$ret = $client->POST('api/rest/0.001/login', substr($params, 1), 
      {'Content-type' => 'application/x-www-form-urlencoded'}); 
Powiązane problemy