#python #regex
#python #регулярное выражение
Вопрос:
Я совершенно новичок в Python.Мне нужно написать скрипт на Python, который анализирует URL запроса apache и извлекает из него некоторые данные.
Скрипт является :
#!/usr/bin/python
import sys
import re
for line in sys.stdin:
ipAddress = re.search('ipAddress=([^amp;]*)', line)
key = re.search('key=([^amp;]*)', line)
if len(ipAddress.group(1)) != 0 and len(key.group(1)) != 0:
print "%st%s" % (ipAddress.group(1), key.group(1))
Пожалуйста, скажите мне, в чем ошибка в скрипте и как ее проверить с помощью ввода, подобного этому:
GET request?key=xxxxxxxxxxamp;ipAddress=000.000.000.00amp;id=blah... HTTP/1.1
Комментарии:
1. Вы пробовали его отлаживать? Или даже просто выполнить некоторый код в консоли Python, чтобы посмотреть, что произойдет?
2. Вам нужно предоставить дополнительную информацию здесь. Я выполнил этот скрипт, вставленный в ваш пример, и получил результат. Очевидно, что опубликованный код работает, но, возможно, не так, как ожидалось. Можете ли вы рассказать нам, что вы видите, и чего вы ожидали?
3. В чем проблема использования модуля urlparse.
4. Проверьте
urlparse
в стандартной библиотеке, которая поможет вам правильно и безопасно анализировать такие строки.
Ответ №1:
Вы не указали, какую ошибку вы получаете, и ваш код не генерирует никаких ошибок для меня, но я вижу несколько вещей, которые могут пойти не так с вашим кодом.
Во-первых, вам нужен просто URL, а не метод и HTTP-версия (что могло бы вызвать некоторые проблемы, если бы IPAddress или key были последними полями), поэтому вам следует разделить строку перед ее анализом:
method, url, version = line.split(' ')
Во-вторых, вы будете получать ошибки, если URL-адрес не содержит поля key
или ipAddress
, потому что ваш код проверки соответствия неисправен. Вместо этого вам следует использовать этот код:
for line in sys.stdin:
method, url, version = line.split(' ')
ipAddress = re.search('ipAddress=([^amp;]*)', url)
key = re.search('key=([^amp;]*)', url)
if ipAddress and key:
print "%st%s" % (ipAddress.group(1), key.group(1))