2010-07-08 13 views
3

J'envoie une requête http à google reader api et j'obtiens un code de réponse inhabituel. suite à la documentation, j'ai demandé un code d'autorisation et l'ai inclus dans l'en-tête de chaque requête. après avoir effectué la connexion, et d'obtenir un code d'auth, j'essayé d'accéder à cette URL, qui fait partie de la documentation:Réponse HTTP 411 Longueur requise, Http Client 4.0.1 Android

http://www.google.com/reader/api/0/stream/items/contents

quand j'envoie la demande, je reçois un code 411 d'état, qui est censé signifie "longueur requise". la longueur, comme je l'ai trouvé, est supposée être la longueur, en octets, du corps du message. il n'y a pas de corps de message dans cette requête. il n'y a qu'un seul en-tête, le paramètre POST i = "ID de l'élément" et l'URL elle-même. J'ai essayé de mettre l'en-tête "Content-Length" à "0" et aussi à "-1" en vain. Ce qui est vraiment intéressant, c'est que ce même code a bien fonctionné avant que Google ne modifie sa procédure d'autorisation. il est évident qu'ils ont changé quelque chose d'autre ...

donc ma question est ce que EXACTEMENT causerait un code de réponse 411 et comment puis-je l'empêcher?

Répondre

2

Cette erreur se produit uniquement avec les types de requêtes POST et PUT, car ces deux types (en quelque sorte) prévoient d'avoir un corps de requête incluant les paramètres de la requête (texte brut ainsi que pièces jointes). Toutefois, comme la documentation le suggère, il s'agit en grande partie d'une valeur obsolète et, de manière réaliste, les services Web doivent traiter les demandes sans se fier à Content-Length.

Donc ce n'est pas le problème d'un expéditeur de demande, mais c'est (je dirais) un bug du côté service. Néanmoins, définir un en-tête Content-Length (Mind the capitalization) à 0 devrait être la solution de contournement.

+0

J'ai 'Erreur: 411' pour la requête' GET'. Je demandais au serveur d'un script Python à mon serveur django. Donc, il ne s'agit pas seulement de "POST" et de "PUT" –