Найти - Пользователи
Полная версия: метод request
Начало » Python для новичков » метод request
1
serrrgggeee
Здравствуйте! есть такой скрипт
import socket
import re
import sys
def check_webserver(address, port, resource):
        if not resource.startswith('/'):
                resource = '/' + resource
        request.string = "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n" % (resource, address)
        print "HTTPr request:"
        print "|||s|||" % request_string
        s = socket.socket()
        print "Attempting to connect to %s on port %s" % (address, port)
        try:
                s.connect((address, port))
                print "Connected to %s on port %s" % (address, port)
                s.send(request_string)
                rsp = s.recv(100)
                print 'Received 100 bytes of HTTP response'
                print '|||%s|||' % rsp
        except socket.error, e:
                print "Connection to %s on port %s failed: %s" % (address, port, e)
                return False
        finally:
                print "Closing the connection"
                s.close()
        lines = rsp.splitlines()
        print 'First line of HTTP response: %s' % lines[0]
        try:
                version, status, message = re.split(r'\s+', lines[0], 2)
                print 'Version: %s, Status: %s, Message: %s' % (version, status, message)
        except ValueError:
                print 'Failed to split status line'
                return False
        if status in ['200', '301']:
                print 'Success - status was %s" % status'
                return True
        else:
                print 'Status was %s" % status'
                return False
if __name__ == '__main__':
        from optparse import OptionParser
        parser = OptionParser()
        parser.add_option("-a", "--address", dest="address", default='localhost', help="ADDRESS for webserver", metavar="ADDRESS")
        parser.add_option("-p", "--port", dest="port", type="int", default=80, help="P0RT for webserver", metavar="P0RT")
        parser.add_option("-r", "--resource", dest="resource", default='index.html', help="RES0URCE to check", metavar="RES0URCE")
        (options, args) = parser.parse_args()
        print 'options: %s, args: %s' % (options, args)
        check = check_webserver(options.address, options.port, options.resource)
        print 'check_webserver returned %s' % check
        sys.exit(not check)
он осуществляет запрос к веб серверу, но проблема в том что интерпретатор ругается на метод request
если я использую python3
serrrgggeee@serrrgggeee-desktop:~$ python3 socket2.py -a 192.168.4.115 -p 80 -r apache2-default
  File "socket2.py", line 8
    print "HTTPr request:"
                         ^
SyntaxError: invalid syntax
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 21, in <module>
    from urllib.request import urlopen
  File "/usr/lib/python3.4/urllib/request.py", line 88, in <module>
    import http.client
  File "/usr/lib/python3.4/http/client.py", line 69, in <module>
    import email.parser
  File "/usr/lib/python3.4/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.4/email/feedparser.py", line 27, in <module>
    from email import message
  File "/usr/lib/python3.4/email/message.py", line 15, in <module>
    from email import utils
  File "/usr/lib/python3.4/email/utils.py", line 29, in <module>
    import socket
  File "/home/serrrgggeee/socket.py", line 8
    print 'Attemping to %s connect to %s  on port '  (address, port)
                                                  ^
SyntaxError: invalid syntax
Original exception was:
  File "socket2.py", line 8
    print "HTTPr request:"
                         ^
SyntaxError: invalid syntax
если python то
serrrgggeee@serrrgggeee-desktop:~$ python socket2.py -a 192.168.4.115 -p 80 -r apache2-default
options: {'resource': 'apache2-default', 'port': 80, 'address': '192.168.4.115'}, args: []
Traceback (most recent call last):
  File "socket2.py", line 47, in <module>
    check = check_webserver(options.address, options.port, options.resource)
  File "socket2.py", line 7, in check_webserver
    request.string = "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n" % (resource, address)
NameError: global name 'request' is not defined
Alen
В python3 оператор print стал функцией, поэтому нужно писать содержимое функции в скобках.
Для python версии 2.7 и выше этот синтаксис также корректен.

 print("HTTPr request:")

и так далее…

Смотрим дальше

NameError: global name 'request' is not defined

Вы обращаетесь к свойству несуществующего класса, который нигде не объявлен, не импортирован и не передан функции.

 request.string = "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n" % (resource, address)

Возможно это просто переменная, тогда точка как разделитель недопустима, принято использовать знак подчеркивания, т.е. request_string (что собственно ниже и видно – просто опечатка).
serrrgggeee
теперь вот какие ошибки имею
serrrgggeee@serrrgggeee-desktop:~$ python3 socket2.py -a 192.168.4.115 -p 80 -r apache2-default
  File "socket2.py", line 19
    except  socket.error, e:
                        ^
SyntaxError: invalid syntax
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 21, in <module>
    from urllib.request import urlopen
  File "/usr/lib/python3.4/urllib/request.py", line 88, in <module>
    import http.client
  File "/usr/lib/python3.4/http/client.py", line 69, in <module>
    import email.parser
  File "/usr/lib/python3.4/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/lib/python3.4/email/feedparser.py", line 27, in <module>
    from email import message
  File "/usr/lib/python3.4/email/message.py", line 15, in <module>
    from email import utils
  File "/usr/lib/python3.4/email/utils.py", line 29, in <module>
    import socket
  File "/home/serrrgggeee/socket.py", line 8
    print 'Attemping to %s connect to %s  on port '  (address, port)
                                                  ^
SyntaxError: invalid syntax
Original exception was:
  File "socket2.py", line 19
    except  socket.error, e:
                        ^
SyntaxError: invalid syntax
это наверное тоже связанно с изменениями?
Alen
serrrgggeee
теперь вот какие ошибки имею

Ну так дальше скобки проставьте у всех функций print.

serrrgggeee
File “/home/serrrgggeee/socket.py”, line 8

Измените имя у файла, socket - это стандартная библиотека, обзовите файл как-нибудь по другому.
serrrgggeee
ну вот что у меня
import socket
import re
import sys
def check_webserver(address, port, resource):
        if not resource.startswith('/'):
                resource = '/' + resource
        request_string = "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n" % (resource, address)
        print ("HTTPr request:")
        print("|||s|||" % request_string)
        s = socket.socket()
        print("Attempting to connect to %s on port %s" % (address, port))
        try:
                s.connect((address, port))
                print ("Connected to %s on port %s" % (address, port))
                s.send(request_string)
                rsp = s.recv(100)
                print ('Received 100 bytes of HTTP response')
                print ('|||%s|||' % rsp)
        except  socket.error, e:
                print ("Connection to %s on port %s failed: %s" % (address, port, e))
                return False
        finally:
                print ("Closing the connection")
                s.close()
        lines = rsp.splitlines()
        print ('First line of HTTP response: %s' % lines[0])
        try:
                version, status, message = re.split(r'\s+', lines[0], 2)
                print ('Version: %s, Status: %s, Message: %s' % (version, status, message)
        except ValueError:
                print ('Failed to split status line')
                return False
        if status in ['200', '301']:
                print ('Success - status was %s" % status')
                return True
        else:
                print ('Status was %s" % status')
                return False
if __name__ == '__main__':
        from optparse import OptionParser
        parser = OptionParser()
        parser.add_option("-a", "--address", dest="address", default='localhost', help="ADDRESS for webserver", metavar="ADDRESS")
        parser.add_option("-p", "--port", dest="port", type="int", default=80, help="P0RT for webserver", metavar="P0RT")
        parser.add_option("-r", "--resource", dest="resource", default='index.html', help="RES0URCE to check", metavar="RES0URCE")
        (options, args) = parser.parse_args()
        print('options: %s, args: %s' % (options, args))
        check = check_webserver(options.address, options.port, options.resource)
        print ('check_webserver returned %s' % check)
        sys.exit(not check)
а имя у меня не socket.py a socket2.py
Alen
serrrgggeee
а имя у меня не socket.py a socket2.py

А это что за файл?

 File "/home/serrrgggeee/socket.py", line 8
    print 'Attemping to %s connect to %s  on port '  (address, port)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB