2 votes

Erreur de trop de redirections en utilisant des requêtes Python

Les requêtes HTTP fonctionnent correctement sur mon hôte local, mais l'exécution des mêmes requêtes HTTP à l'aide de la bibliothèque python requests sur mon serveur renvoie une erreur "Too Many Redirects".

Quand j'entre

localhost/terminal/jfk

dans un navigateur, j'obtiens un dictionnaire json comme prévu.

Cependant, lorsque j'exécute la commande suivante en python en utilisant la bibliothèque python requests sur mon serveur

requests.get('http://splitmyri.de/terminal/jfk')

Je reçois une erreur "Too Many Redirects" du module des demandes.

Vous avez une idée de la cause de l'erreur ? Ou des recommandations pour réduire les causes potentielles ?

7voto

Mike Pennington Points 16712

Asha,

Après que vous ayez répondu que c'est bien votre site, j'ai vérifié pourquoi je recevais une page GoDaddy.com vide. Le problème est que votre entrée DNS pour splitmyri.de renvoie deux enregistrements A différents...

Analyse des résultats, en utilisant 107.10.141.119 :
Codage dur 107.10.141.119 splitmyri.de dans mon /etc/hosts m'a permis d'effectuer des requêtes sur 107.10.141.119, qui renvoie "ceci est mon site" dans index.html (puis j'ai vérifié http://splitmyri.de/terminal/ et obtenu un hash json vide, avec un mime type=[application/json]). La vérification de l'entrée inverse pour cette adresse renvoie un hôte Amazon AWS (le type d'entrée que j'attends pour une véritable page Web). Maintenant, votre code ci-dessus fonctionne comme prévu...

[mpenning@Bucksnort ~]$ python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.get('http://splitmyri.de/terminal/')
<Response [200]>
>>> requests.get('http://splitmyri.de/terminal/').content
u'{}'
>>> # requests.get('http://splitmyri.de/terminal/jfk').content returns a huge json hash 

Analyse des résultats en utilisant 68.178.232.100 :
En effectuant le même exercice avec des requêtes sur 68.178.232.100, on obtient une page GoDaddy.com vide. En inversant le mappage de cette adresse, on obtient une entrée typique pour un domaine parqué. L'envoi d'une requête ici renvoie TooManyRedirects comme vous l'avez vu dans vos tentatives...

[mpenning@Bucksnort ~]$ python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) 
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> foo = requests.get('http://splitmyri.de/terminal/jfk')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.linux-i686/egg/requests/api.py", line 50, in get
  File "build/bdist.linux-i686/egg/requests/api.py", line 37, in request
  File "build/bdist.linux-i686/egg/requests/sessions.py", line 170, in request
  File "build/bdist.linux-i686/egg/requests/models.py", line 383, in send
  File "build/bdist.linux-i686/egg/requests/models.py", line 210, in _build_response
requests.exceptions.TooManyRedirects
>>> 

SOLUTION :
Fixez votre DNS pour splitmyri.de (en supprimant l'enregistrement A pour 68.178.232.100) et tout sera bon.

J'ai inclus les informations DNS ci-dessous à titre d'information...

[mpenning@Bucksnort ~]$ dig splitmyri.de

; <<>> DiG 9.6-ESV-R4 <<>> splitmyri.de
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54051
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:
;splitmyri.de.                  IN      A

;; ANSWER SECTION:
splitmyri.de.           3193    IN      A       68.178.232.100
splitmyri.de.           3193    IN      A       107.20.141.119

;; AUTHORITY SECTION:
splitmyri.de.           3193    IN      NS      ns49.domaincontrol.com.
splitmyri.de.           3193    IN      NS      ns50.domaincontrol.com.

;; ADDITIONAL SECTION:
ns49.domaincontrol.com. 3193    IN      A       216.69.185.25
ns49.domaincontrol.com. 3193    IN      AAAA    2607:f208:206::19
ns50.domaincontrol.com. 3193    IN      A       208.109.255.25
ns50.domaincontrol.com. 3193    IN      AAAA    2607:f208:302::19

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Oct 26 05:14:51 2011
;; MSG SIZE  rcvd: 205

[mpenning@Bucksnort ~]$ 
[mpenning@Bucksnort ~]$ dig -x 107.20.141.119

; <<>> DiG 9.6-ESV-R4 <<>> -x 107.20.141.119
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41049
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 6

;; QUESTION SECTION:
;119.141.20.107.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
119.141.20.107.in-addr.arpa. 300 IN     PTR     ec2-107-20-141-119.compute-1.amazonaws.com.

;; AUTHORITY SECTION:
141.20.107.in-addr.arpa. 900    IN      NS      pdns1.ultradns.net.
141.20.107.in-addr.arpa. 900    IN      NS      pdns2.ultradns.net.
141.20.107.in-addr.arpa. 900    IN      NS      pdns3.ultradns.org.
141.20.107.in-addr.arpa. 900    IN      NS      pdns5.ultradns.info.
141.20.107.in-addr.arpa. 900    IN      NS      pdns4.ultradns.org.
141.20.107.in-addr.arpa. 900    IN      NS      pdns6.ultradns.co.uk.

;; ADDITIONAL SECTION:
pdns1.ultradns.net.     86400   IN      A       204.74.108.1
pdns1.ultradns.net.     86400   IN      AAAA    2001:502:f3ff::1
pdns2.ultradns.net.     86400   IN      A       204.74.109.1
pdns3.ultradns.org.     86400   IN      A       199.7.68.1
pdns4.ultradns.org.     86400   IN      A       199.7.69.1
pdns4.ultradns.org.     86400   IN      AAAA    2001:502:4612::1

;; Query time: 306 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Oct 26 05:09:47 2011
;; MSG SIZE  rcvd: 392

[mpenning@Bucksnort ~]$ dig -x 68.178.232.100

; <<>> DiG 9.6-ESV-R4 <<>> -x 68.178.232.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38578
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;100.232.178.68.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
100.232.178.68.in-addr.arpa. 3600 IN    PTR     parkwebwin-v01.prod.mesa1.secureserver.net.

;; AUTHORITY SECTION:
232.178.68.in-addr.arpa. 3600   IN      NS      cns1.secureserver.net.
232.178.68.in-addr.arpa. 3600   IN      NS      cns2.secureserver.net.

;; ADDITIONAL SECTION:
cns1.secureserver.net.  3600    IN      A       208.109.255.100
cns2.secureserver.net.  3600    IN      A       216.69.185.100

;; Query time: 173 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Oct 26 05:12:06 2011
;; MSG SIZE  rcvd: 171

[mpenning@Bucksnort ~]$

1voto

hochl Points 5353

Si vous avez besoin de circonscrire le problème, une bonne idée est d'utiliser wireshark et analyser les différentes connexions et leur contenu. Vous verrez ainsi ce qui est transféré sur le fil. C'est un bon moyen de déboguer les problèmes liés au protocole TCP. En outre, vous pouvez utiliser la fonction pdb module Python et déboguer votre programme. Édition pdb.set_trace() juste avant l'appel, puis un seul pas dans la fonction et voir ce qu'elle fait. Plus d'informations sur pdb peut être trouvée dans la documentation Python ou en appuyant sur la touche ? .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X