#python
#python
Вопрос:
Я пишу скрипт, который принимает URL, имя пользователя и пароль в качестве аргументов, выполняет веб-запрос и регистрирует повторные запросы. Я хотел бы использовать csv-файл, содержащий множество сайтов / учетных данных, и выполнять циклический запрос для каждой записи, и если есть какие-либо исключения / ошибки, я хочу просто перейти к следующей записи в файле, но мой скрипт зависает после первого запуска цикла
В настоящее время я просто вручную передавал аргументы через флаги командной строки один за другим, но это неосуществимо, так как вручную потребовалась бы целая вечность, когда я пытаюсь создать цикл и извлечь аргументы из файла, моя функция выполняется один раз, а затем зависает на неопределенный срок, это происходит как при наличии except, так и при отсутствии.
#currently Im using command line arguments to manually input the
#arguments for the function below, which works fine but I want to pull
#arguments from a list in a csv file (see comments at end for what ive #tried)
def webrequest(username,password):
url = site
headers = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36",
'Accept-Encoding' : 'none'
}
payload = {'log': username,
'pwd': password
}
session = requests.session
r = session.post(url, headers=headers, data=payload)
if r.status_code == 404
print "404"
#end function, move on to next line in csv
if r.status_code == 200
print r.text
# move on to next line in csv
#file = open(file, r)
#with open(file) as f:
# for line in f:
# args = line.split(",")
# webrequest(args[0],args[1],args[2])
Я ожидаю, что когда функция достигнет конца, она начнет все сначала, используя следующую строку в файле csv, но этого не происходит .. она просто зависает в командной строке
Комментарии:
1. Вы отладили свой код? Нет вывода / нет ошибки?
2. Вы уверены, что это не просто выполняется очень долго? Вы пробовали печатать в цикле?
3. Сначала я бы протестировал это всего с двумя строками в файле. Затем я бы рассмотрел возможность введения задержки между запросами.
Ответ №1:
Попробуйте session.post() с параметром timeout. Подробности здесь:http://docs.python-requests.org/en/master/user/advanced/#timeouts
Скорее всего, ваш веб-сервер не возвращает ответ, поэтому вы чувствуете, что ваша функция застряла.
Комментарии:
1. Спасибо, похоже, это проблема. Однако теперь, когда я установил тайм-аут, по достижении этого тайм-аута возникает исключение, и процесс существует. Как я могу правильно обработать это исключение? нравится
if r.timeout: blah blah
?2. Я думаю, что вашим первым шагом должно быть отлаживание вашего сервера и выяснение причины истечения времени ожидания. Вы можете узнать больше об обработке исключений Python здесь: programiz.com/python-programming/exception-handling
3. На самом деле это не мой сервер, я делаю запросы к большому списку серверов, и если время ожидания истекает или выдается ошибка, я просто хочу пропустить это и перейти к следующему серверу в списке.
4. Хорошо, в этом случае вы можете просто обработать исключение тайм-аута и перейти к следующей строке.