Я пишу клиентские модульные тесты Python, чтобы проверить, указывают ли перенаправления HTTP 302 на моем сайте Google App Engine на правильные страницы. До сих пор я звонил urllib2.urlopen(my_url).geturl()
. Однако я встретился с 2 проблемами:
?k1=v1&k2=v2
; как я могу видеть их? (Я должен проверить, передал ли я правильно исходную строку запроса URL посетителя странице перенаправления.)geturl()
показывает заключительный URL после любых дополнительных перенаправлений. Я просто забочусь о первом перенаправлении (то от моего сайта); я - агностик к чему-либо после этого. Например, давайте предположим, что мой сайт example.com
. Если пользователь запрашивает http://www.example.com/somepath/?q=foo
, Я мог бы хотеть перенаправить их к http://www.anothersite.com?q=foo
. То, что другой сайт мог бы сделать другое перенаправление к http://subdomain.anothersite.com?q=foo
, которым я не могу управлять или предсказать. Как я могу удостовериться, что мое перенаправление корректно? Предоставьте follow_redirects = False
функции fetch , затем извлеките местоположение первого перенаправления из заголовка 'location' в ответе, например:
response = urlfetch.fetch(your_url, follow_redirects=False)
location = response.headers['Location']
Используйте httplib (и посмотрите на статус возврата и заголовок Location в ответе), чтобы избежать "auto-follow redirects", которые мешают вашему тестированию. Есть хороший пример здесь.