Ошибка слишком большого количества перенаправлений при использовании запросов Python - PullRequest
2 голосов
/ 26 октября 2011

HTTP-запросы работают нормально на моем локальном хосте, но выполнение тех же HTTP-запросов с использованием библиотеки запросов python на моем сервере возвращает ошибку "Too Many Redirects"

Когда я ввожу

localhost/terminal/jfk

в браузере я получаю словарь json, как и ожидалось.

Однако, когда я запускаю следующее в python, используя библиотеку запросов python на моем сервере

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

Я получаю ошибку "Too Many Redirects" от модуля запросов.

Есть мысли о том, что является причиной ошибки? Или рекомендации по сужению потенциальных причин?

Ответы [ 2 ]

6 голосов
/ 26 октября 2011

Аша,

После того, как вы ответили, что это действительно ваш сайт, я выяснил, почему у меня пустая страница GoDaddy.com. Проблема в том, что ваша запись DNS для splitmyri.de возвращает две разные записи A ...

Анализ результатов с использованием 107.10.141.119 :
Жесткое кодирование 107.10.141.119 splitmyri.de в моем /etc/hosts файле позволило мне выполнить запросы к 107.10.141.119, который возвращает «это мой сайт» в index.html (затем я проверил http://splitmyri.de/terminal/ и получил пустой хэш json, с типом пантомимы = [application / json]). Проверка обратной записи для этого адреса возвращает хост Amazon AWS (вид записи, который я ожидаю для реальной веб-страницы). Теперь ваш код выше работает как положено ...

[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 

Анализ результатов с использованием 68.178.232.100 :
Выполнение того же упражнения с запросами к 68.178.232.100 приводит к пустой странице GoDaddy.com. Обратное сопоставление этого адреса приводит к типичной записи для припаркованного домена. Отправка запроса здесь возвращает TooManyRedirects, как вы видели в своих попытках ...

[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
>>> 

РЕШЕНИЕ :
Исправьте свой DNS для splitmyri.de (удалив запись A для 68.178.232.100), и все будет хорошо.

Включая информацию о DNS ниже как FYI ...

[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 ~]$ 
1 голос
/ 26 октября 2011

Если вам необходимо сузить проблему, рекомендуется использовать wireshark и проанализировать различные соединения и их содержимое. Таким образом, вы увидите, что передается по проводам. Хорошо подходит для отладки проблем, связанных с TCP. Кроме того, вы можете использовать модуль pdb Python и отладить вашу программу. Введите pdb.set_trace() прямо перед вызовом, затем перейдите к функции и посмотрите, что она делает. Дополнительную информацию о pdb можно найти в документации по Python или нажав ?.

...