Raté,
après un nouveau essai, je reçois :
irb(main):001:0> Timestamp.doTsp('[email protected]','PASSWORDOK')
=> #<HTTParty::Response:0x308d3a8 @parsed_response="@INVALID_REQUEST",
@response=#<Net::HTTPBadRequest 400 J readbody=true>,
@headers={"cache-control"=>["no-cache"], "pragma"=>["no-cache"],
"content-type"=>["application/octet-stream"],
"transfer-encoding"=>["chunked"]}>
Qui se traduit par :
*Lorsqu'une requête échoue, Universign indique un code d'erreur qui vous
permet de comprendre et de résoudre le problème rencontré.*
- *400 - requête malformée ou option non supportée.*
Le 21 novembre 2011 18:08, Frédérick Sauvage
<[email protected]>a écrit :
> En tâtonnant, j'arrive à :
>
> # encoding : utf-8
>
> require 'base64'
> require 'rubygems'
> require 'httparty'
>
> class Timestamp
>
> # SOURCE : https://www.universign.eu/fr/web-services
>
> =begin
>
>
> static InputStream doTsp(String login, String pwd, String hash, String
> algo)
> throws Exception
> {
> URLConnection conn = new URL("https://ws.universign.eu/tsa/post/
> ").openConnection();
>
> conn.setDoOutput(true);
> conn.setDoInput(true);
> String authString = login + ":" + pwd;
> String authStringEnc = Base64.encode(authString);
> conn.setRequestProperty("Authorization", "Basic " +
> authStringEnc);
>
> OutputStream out = conn.getOutputStream();
> String params = "hashAlgo=" + URLEncoder.encode(algo, "UTF-8") +
> "&hashValue="
> + URLEncoder.encode(hash, "UTF-8") + "&withCert=" +
> URLEncoder.encode("false", "UTF-8");
> out.write(params.getBytes("UTF-8"));
> out.flush();
>
> return conn.getInputStream();
> }
> =end
> include HTTParty
> #hash = "test pour universign"
> def self.doTsp(login="toto",
> pwd="titi",hash="cb493b4f9c0bda24f0443a11dad75b3a04aec8b78440c193eea4857e4d6f8725",algo="SHA256")
>
> authString = login + ":" + pwd
> authStringEnc = Base64.encode64(authString)
> base_uri "https://ws.universign.eu/tsa/post/"
> headers "Authorization" => "Basic " + authStringEnc
> params = {"hashAlgo" => CGI::escape(algo), "hashValue" =>
> CGI::escape(hash), "withCert" => CGI::escape("false") }
> post "/", :query => params , :body => headers
> end
>
> end
>
> Je pense être proche du but car j'obtiens :
> => #<HTTParty::Response:0x8 @parsed_response=nil,
> @response=#<Net::HTTPUnauthorized 401 J readbody=true>,
> @headers={"cache-control"=>["no-cache"], "pragma"=>["no-cache"],
> "content-type"=>["application/octet-stream"],
> "transfer-encoding"=>["chunked"], "www-authenticate"=>["Basic
> realm=\"Universign\""]}>
> avec ce login et mot de passe.
> Mais aucune réponse avec les bons login/mot de passe. Si tout va bien, il
> ne me manque que l'équivalent de conn.getInputStream() que je n'ai pas
> trouvé.
>
> Le 21 novembre 2011 17:31, Bruno Muscolino <[email protected]> a écrit
> :
>
> J'utilise ce même code pour me connecter aux WS de ma banque.
>>
>> :)
>>
>> Have fun
>> Bruno
>>
>> On Nov 21, 2011, at 11:29 AM, Frédérick Sauvage wrote:
>>
>> Oui je cherches à utiliser leur WebService ... je vais essayer de me
>> débrouiller avec cela et la doc de httparty tant bien que mal
>>
>> Le 21 novembre 2011 17:10, Bruno Muscolino <[email protected]> a
>> écrit :
>>
>>> En gros ce que tu cherches a faire c'est de te connecter sur leur page
>>> et utiliser leur WebServices?
>>>
>>> En ruby: (voir doc do httparty pour determiner ou non si tu veux qqch
>>> dans la hash query)
>>>
>>> require 'rubygems'
>>> require 'httparty'
>>>
>>> class LoginSomeWhere
>>> include HTTParty
>>> base_uri "https://YOURURL.COM"
>>> headers "content-type" => "application/x-www-form-urlencoded"
>>>
>>> def self.login username, password
>>> post "/", :query => { }, :body => { :username => username, :password
>>> => password }
>>> end
>>> end
>>>
>>> puts LoginSomeWhere.login "username", "password"
>>>
>>> Ca
>>>
>>> On Nov 21, 2011, at 10:06 AM, Frédérick Sauvage wrote:
>>>
>>> > Bonjour,
>>> >
>>> > Cherchant à créer un sceau d'horodatage via Universign, je me retrouve
>>> > face à 3 codes pour réaliser cela ... évidemment nulle trace de Ruby.
>>> > Je cherche actuellement comment m'adapter au Ruby (en partant du Java
>>> > que je maitrise mieux), mais je rencontre des difficultés.
>>> >
>>> > Une bonne âme pourrait-elle m'aider ?
>>> >
>>> > Voici les différents codes :
>>> >
>>> > En Python :
>>> >
>>> > #!/usr/bin/python
>>> >
>>> > import urllib;
>>> > import urllib2;
>>> > import hashlib;
>>> > import base64;
>>> >
>>> > # first we construct the parameters for the request
>>> > data = {};
>>> > data['hashAlgo'] = "SHA256";
>>> > data['withCert'] = "true";
>>> > data['hashValue'] = hashlib.sha256(dataToTimestamp).hexdigest();
>>> > params = urllib.urlencode(data);
>>> >
>>> > # basic HTTP authentication is needed to access this service
>>> > headers = {};
>>> > auth = base64.encodestring(username + ":" + password);
>>> > headers["Authorization"] = "Basic " + auth;
>>> >
>>> > # then the request itself
>>> > request = urllib2.Request("https://ws.universign.eu/tsa/post/",
>>> > params, headers);
>>> >
>>> > # all is ready, the request is made
>>> > response = urllib2.urlopen(request);
>>> > tsp = response.read();
>>> >
>>> >
>>> >
>>> > En PHP :
>>> >
>>> > $hashedDataToTimestamp = hash('sha256', $dataToTimestamp);
>>> > $dataToSend = array ('hashAlgo' => 'SHA256', 'withCert' =>
>>> > 'true', 'hashValue' => $hashedDataToTimestamp);
>>> > $dataQuery = http_build_query($dataToSend);
>>> > $context_options = array (
>>> > 'http' => array (
>>> > 'method' => 'POST',
>>> > 'header'=> "Content-type: application/x-www-form-
>>> > urlencoded\r\n"
>>> > ."Content-Length: " . strlen($dataQuery) . "\r\n"
>>> > ."Authorization: Basic ".base64_encode($login.':'.
>>> > $password)."\r\n",
>>> > 'content' => $dataQuery
>>> > )
>>> > );
>>> >
>>> > $context = stream_context_create($context_options);
>>> > $fp = fopen("https://ws.universign.eu/tsa/post/", 'r', false,
>>> > $context);
>>> > $tsp = stream_get_contents($fp);
>>> >
>>> >
>>> >
>>> > En Java :
>>> >
>>> > static InputStream doTsp(String login, String pwd, String hash,
>>> > String algo)
>>> > throws Exception
>>> > {
>>> > URLConnection conn = new URL("https://ws.universign.eu/tsa/
>>> > post/").openConnection();
>>> > conn.setDoOutput(true);
>>> > conn.setDoInput(true);
>>> > String authString = login + ":" + pwd;
>>> > String authStringEnc = Base64.encode(authString);
>>> > conn.setRequestProperty("Authorization", "Basic " +
>>> > authStringEnc);
>>> >
>>> > OutputStream out = conn.getOutputStream();
>>> > String params = "hashAlgo=" + URLEncoder.encode(algo, "UTF-8")
>>> > + "&hashValue="
>>> > + URLEncoder.encode(hash, "UTF-8") + "&withCert=" +
>>> > URLEncoder.encode("false", "UTF-8");
>>> > out.write(params.getBytes("UTF-8"));
>>> > out.flush();
>>> >
>>> > return conn.getInputStream();
>>> > }
>>> >
>>> >
>>> > Merci d'avance,
>>> > Frédéric
>>> >
>>> > --
>>> > Vous avez reçu ce message, car vous êtes abonné au groupe
>>> "Railsfrance" de Google Groups.
>>> > Pour transmettre des messages à ce groupe, envoyez un e-mail à
>>> l'adresse [email protected]
>>> > Pour résilier votre abonnement envoyez un e-mail à l'adresse
>>> [email protected]
>>>
>>> --
>>> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance"
>>> de Google Groups.
>>> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
>>> [email protected]
>>> Pour résilier votre abonnement envoyez un e-mail à l'adresse
>>> [email protected]
>>
>>
>>
>>
>> --
>> SAUVAGE Frédéric
>>
>>
>> --
>> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance"
>> de Google Groups.
>> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
>> [email protected]
>> Pour résilier votre abonnement envoyez un e-mail à l'adresse
>> [email protected]
>>
>>
>> --
>> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance"
>> de Google Groups.
>> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
>> [email protected]
>> Pour résilier votre abonnement envoyez un e-mail à l'adresse
>> [email protected]
>>
>
>
>
> --
> SAUVAGE Frédéric
>
>
--
SAUVAGE Frédéric
--
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse
[email protected]