[http][ipp] requete passant en GET et pas en POST

Le
Thomas Harding
Bonjour,
j'essaie d'implémenter une classe client ipp (internet printing
protocol) en php.

Problème : les requêtes passent en GET (je me fais jeter du serveur
poliment parce que "je ne suis pas autorisé à utiliser la ressource"),
mais pas en POST (réponse : HTTP/1.1 400 Bad Request blah blah).

J'ai pourtant sniffé le trafic d'une requête de client IPP existant
(lp), et celui-ci passe en POST (ce qui est plutôt normal, vu que le but
est d'imprimer un fichier, pas de récupérer une resource. C'est long, un
fichier).

S'il y a des demandes, je mettrait les captures d'ethereal sur ma page
perso.


Ci-dessous, le code : (j'ai wrappé certaines lignes pour les news,
désolé si le résultat n'est pas très propre)

#########################################
public function printJob($queue){

//Private static function prints waiting jobs on the queue.
//$this->printWaiting($queue);


//Open a new connection to send the control file and data.
$stream = stream_socket_client("tcp://".$this->host.":"
.$this->port, $this->errNo, $this->errStr, $this->timeout);
if(!$stream){
return $this->errNo." (".$this->errStr.")";
} else {

$job = self::getJobId();//Get a new id for this job

$string = 0x0101 // 1.1 version-number
. 0x0002 // Print-Job operation-id
. 0x00000001 // 1 request-id
. 0x01 // start operation-attributes
//operation-attributes-tag
. 0x47 // charset type
//value-tag
. 0x0012 // name-length
. "attributes-charset" // attributes-charset name
. 0x0008 // value-length
. "us-ascii" // US-ASCII value
. 0x48 // natural-language type value-tag
. 0x001B // name-length
. "attributes-natural-language"
//attributes-natural-language
. 0x0005 // value-length
. "en-us" // en-US value
. 0x45 // uri type value-tag
. 0x000B // name-length
. "printer-uri" // printer-uri name
. "0x0005"
. "epson"
// . 0x0014 // value-length
// . "ipp://localhost/epson" // printer epson value
. 0x42 // nameWithoutLanguage type value-tag
. 0x0008 // name-length
. "job-name" // job-name name
. 0x0004 // value-length
. "toto" // toto value
. 0x22 // boolean type value-tag
. 0x0016 // name-length
. "ipp-attribute-fidelity"
// ipp-attribute-fidelity name
. 0x0001 // value-length
. 0x01 // true value
. 0x02 // start job-attributes
//job-attributes-tag
. 0x21 // integer type value-tag
. 0x0006 // name-length
. "copies" // copies name
. 0x0004 // value-length
. 0x00000001 // 1 value
. 0x44 // keyword type value-tag
. 0x0005 // name-length
. "sides" // sides name
. 0x0009 // value-length
. "one-sided" // one-sided value
. 0x03 // end-of-attributes end-of-attributes-tag
. "test";

//$string .= " HTTP/1.1";

$lenght = strlen($string);

fwrite($stream,"POST / HTTP/1.1");
fwrite($stream,"Content-lenght: $lenght");
fwrite($stream,"Content-type: application/ipp");
fwrite($stream,"Host: localhost");
fwrite($stream,"Accept: * /*");
fwrite($stream,"");


// fwrite($stream,"GET ");

fwrite($stream,$string);

// fwrite($stream," HTTP/1.1");

$this->debug .= "Confirmation of receive cmd:"
. fread($stream,1048576)."";
return;

}
--
Thomas Harding
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Thomas Harding
Le #747389
Le 10-12-2005, Thomas Harding

Bonjour,
j'essaie d'implémenter une classe client ipp (internet printing
protocol) en php.

Problème : les requêtes passent en GET (je me fais jeter du serveur
poliment parce que "je ne suis pas autorisé à utiliser la ressource"),
mais pas en POST (réponse : HTTP/1.1 400 Bad Request blah blah).
[snip]

. 0x0001 // value-length



Bon, ben php n'est pas très pratique : pour envoyer 0x0001 il faut faire
chr(0x00) . chr(0x01).

Je me retrouve maintenant avec des réponses HTTP 200 OK :)

Par contre, toujours pas d'impression, mais je travaille dessus...

--
Thomas Harding

Mathieu Goutelle
Le #747119
Bonsoir,

Dans l'article
j'essaie d'implémenter une classe client ipp (internet printing
protocol) en php.


Rapport avec fr.comp.reseaux.ip ? Votre question a sa place soit sur
fr.comp.lang.php, soit sur le fr.comp.infosystemes.www.* adapté.

Cordialement,
--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle - http://www.cadichonne.net/

Thomas Harding
Le #747114
Le 11-12-2005, Mathieu Goutelle
j'essaie d'implémenter une classe client ipp (internet printing
protocol) en php.


Rapport avec fr.comp.reseaux.ip ? Votre question a sa place soit sur
fr.comp.lang.php, soit sur le fr.comp.infosystemes.www.* adapté.


IPP (Internet Printing Protocol) <> HTTP

IPP utilise HTTP pour le transport, mais ça s'arrête là :)

Voir RFC 2910.

--
Thomas Harding


Mathieu Goutelle
Le #747112
Bonjour,

Dans l'article
IPP (Internet Printing Protocol) <> HTTP

IPP utilise HTTP pour le transport, mais ça s'arrête là :)


Ça n'a toujours rien à voir avec IP...

--
Q: Connaissez-vous la différence entre l'ignorance et l'apathie ?
R: J'en sais rien et je m'en fous.
Mathieu Goutelle -
Pascal
Le #747111
Salut,



IPP (Internet Printing Protocol) <> HTTP

IPP utilise HTTP pour le transport, mais ça s'arrête là :)


Ça n'a toujours rien à voir avec IP...


La charte accepte pourtant "les protocoles sans groupes dédié: NTP,
BIND, TCP, UDP, NetBios surIP... ainsi que les RFCs relatives et leur
implémentation". IPP me semble bien rentrer dans la définition.

Sinon tu proposerais quoi ? fr.comp.infosystemes ?


Poster une réponse
Anonyme