Обмен данными по протоколу http 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обмен данными по протоколу http



>>> from http.client import HTTPConnection

>>> con = HTTPConnection("test1.ru")

>>> con2 = HTTPConnection("test1.ru", 80)

>>> con3 = HTTPConnection("test1.ru:80")

 

Листинг 21.9. Отправка данных методом GET

>>> from http.client import HTTPConnection

>>> from urllib.parse import urlencode

>>> data = urlencode({"color": "Красный", "var": 15}, encoding="cp1251")

>>> headers = { "User-Agent": "MySpider/1.0",

"Accept": "text/html, text/plain, application/xml",

"Accept-Language": "ru, ru-RU",

"Accept-Charset": "windows-1251",

"Referer": "/index.php" }

>>> con = HTTPConnection("test1.ru")

>>> con.request("GET", "/testrobots.php?%s" % data, headers=headers)

>>> result = con.getresponse() # Создаем объект результата

>>> print(result.read().decode("cp1251")) # Читаем данные

... Фрагмент опущен...

>>> con.close() # Закрываем объект соединения

 

Листинг 21.10. Отправка данных методом POST

>>> from http.client import HTTPConnection

>>> from urllib.parse import urlencode

>>> data = urlencode({"color": "Красный", "var": 15}, encoding="cp1251")

>>> headers = { "User-Agent": "MySpider/1.0",

"Accept": "text/html, text/plain, application/xml",

"Accept-Language": "ru, ru-RU",

"Accept-Charset": "windows-1251",

"Content-Type": "application/x-www-form-urlencoded",

"Referer": "/index.php" }

>>> con = HTTPConnection("test1.ru")

>>> con.request("POST", "/testrobots.php", data, headers=headers)

>>> result = con.getresponse() # Создаем объект результата

>>> print(result.read().decode("cp1251"))

... Фрагмент опущен...

>>> con.close()

 

 

>>> result.getheader("Content-Type")

'text/plain; charset=windows-1251'

>>> print(result.getheader("Content-Types"))

None

>>> result.getheader("Content-Types", 10)

 

 

>>> result.getheaders()

[('Date', 'Mon, 27 Apr 2015 13:33:21 GMT'), ('Server', 'Apache/2.2.4

(Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4'), ('X-Powered-By',

'PHP/5.2.4'), ('Content-Length', '422'), ('Content-Type',

'text/plain; charset=windows-1251')]

 

 

>>> dict(result.getheaders())

{'Date': 'Mon, 27 Apr 2015 13:33:21 GMT', 'Content-Length': '422',

'X-Powered-By': 'PHP/5.2.4', 'Content-Type': 'text/plain;

charset=windows-1251', 'Server': 'Apache/2.2.4 (Win32)

mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4'}

 

 

>>> result.status

 

 

>>> result.reason # При коде 200

'OK'

>>> result.reason # При коде 302

'Moved Temporarily'

 

 

>>> result.version # Протокол HTTP/1.1

 

 

>>> print(result.msg)

Date: Mon, 27 Apr 2015 13:33:21 GMT

Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4

X-Powered-By: PHP/5.2.4

Content-Length: 422

Content-Type: text/plain; charset=windows-1251

 

 

>>> result.msg.as_string()

'Date: Mon, 27 Apr 2015 13:33:21 GMT\nServer: Apache/2.2.4 (Win32)

mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4\nX-Powered-By:

PHP/5.2.4\nContent-Length: 422\nContent-Type: text/plain;

charset=windows-1251\n\n'

 

 

>>> result.msg.items()

[('Date', 'Mon, 27 Apr 2015 13:33:21 GMT'), ('Server', 'Apache/2.2.4

(Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4'), ('X-Powered-By',

'PHP/5.2.4'), ('Content-Length', '422'), ('Content-Type',

'text/plain; charset=windows-1251')]

 

 

>>> result.msg.keys()

['Date', 'Server', 'X-Powered-By', 'Content-Length', 'Content-Type']

 

 

>>> result.msg.values()

['Mon, 27 Apr 2015 13:33:21 GMT', 'Apache/2.2.4 (Win32) mod_ssl/2.2.4

OpenSSL/0.9.8d PHP/5.2.4', 'PHP/5.2.4', '422', 'text/plain;

charset=windows-1251']

 

 

>>> result.msg.get("X-Powered-By")

'PHP/5.2.4'

>>> print(result.msg.get("X-Powered-By2"))

None

>>> result.msg.get("X-Powered-By2", failobj=10)

 

 

>>> result.msg.get_all("X-Powered-By")

['PHP/5.2.4']

 

 

>>> result.msg.get_content_type()

'text/plain'

 

 

>>> result.msg.get_content_maintype()

'text'

 

 

>>> result.msg.get_content_subtype()

'plain'

>>> result.msg.get_content_charset()

'windows-1251'

 

Листинг 21.11. Отправка запроса методом HEAD

>>> from http.client import HTTPConnection

>>> headers = { "User-Agent": "MySpider/1.0",

"Accept": "text/html, text/plain, application/xml",

"Accept-Language": "ru, ru-RU",

"Accept-Charset": "windows-1251",

"Referer": "/index.php" }

>>> con = HTTPConnection("test1.ru")

>>> con.request("HEAD", "/testrobots.php", headers=headers)

>>> result = con.getresponse() # Создаем объект результата

>>> print(result.msg)

Date: Mon, 27 Apr 2015 13:39:54 GMT

Server: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4

X-Powered-By: PHP/5.2.4

Content-Type: text/plain; charset=windows-1251

 

>>> result.read() # Данные не передаются, только заголовки!

b''

>>> con.close()

21.6. Обмен данными с помощью модуля urllib.request

>>> from urllib.request import urlopen

>>> res = urlopen("http://test1.ru/testrobots.php")

>>> print(res.read(34).decode("cp1251"))

Название робота: Python-urllib/3.4

>>> print(res.read().decode("cp1251"))

... Фрагмент опущен...

>>> res.read()

b''

 

 

>>> res = urlopen("http://test1.ru/testrobots.php")

>>> print(res.readline().decode("cp1251"))

Название робота: Python-urllib/3.4

 

 

>>> res = urlopen("http://test1.ru/testrobots.php")

>>> res.readlines(3)

[b'\xcd\xe0\xe7\xe2\xe0\xed\xe8\xe5 \xf0\xee\xe1\xee\xf2\xe0:

Python-urllib/3.4\n']

>>> res.readlines()

... Фрагмент опущен...

>>> res.readlines()

[]

 

 

>>> res = urlopen("http://test1.ru/testrobots.php")

>>> for line in res: print(line)

 

 

>>> res = urlopen("http://test1.ru/testrobots.php")

>>> info = res.info()

>>> info.items()

[('Date', 'Mon, 27 Apr 2015 13:55:25 GMT'), ('Server', 'Apache/2.2.4

(Win32) mod_ssl/2.2.4 OpenSSL/0.9.8d PHP/5.2.4'), ('X-Powered-By',

'PHP/5.2.4'), ('Content-Length', '288'), ('Connection', 'close'),

('Content-Type', 'text/plain; charset=windows-1251')]

>>> info.get("Content-Type")

'text/plain; charset=windows-1251'

>>> info.get_content_type(), info.get_content_charset()

('text/plain', 'windows-1251')

>>> info.get_content_maintype(), info.get_content_subtype()

('text', 'plain')

 

 

>>> res.code, res.msg

(200, 'OK')

 

Листинг 21.12. Отправка данных методами GET и POST

>>> from urllib.request import urlopen

>>> from urllib.parse import urlencode

>>> data = urlencode({"color": "Красный", "var": 15}, encoding="cp1251")

>>> # Отправка данных методом GET

>>> url = "http://test1.ru/testrobots.php?" + data

>>> res = urlopen(url)

>>> print(res.read(34).decode("cp1251"))

Название робота: Python-urllib/3.4

>>> res.close()

>>> # Отправка данных методом POST

>>> url = " http://test1.ru/testrobots.php"

>>> res = urlopen(url, data.encode("cp1251"))

>>> print(res.read().decode("cp1251"))

... Фрагмент опущен...

>>> res.close()

 

Листинг 21.13. Использование класса Request

>>> from urllib.request import urlopen, Request

>>> from urllib.parse import urlencode

>>> headers = { "User-Agent": "MySpider/1.0",

"Accept": "text/html, text/plain, application/xml",

"Accept-Language": "ru, ru-RU",

"Accept-Charset": "windows-1251",

"Referer": "/index.php" }

>>> data = urlencode({"color": "Красный", "var": 15}, encoding="cp1251")

>>> # Отправка данных методом GET

>>> url = "http://test1.ru/testrobots.php?" + data

>>> request = Request(url, headers=headers)

>>> res = urlopen(request)

>>> print(res.read(29).decode("cp1251"))

Название робота: MySpider/1.0

>>> res.close()

>>> # Отправка данных методом POST

>>> url = "http://test1.ru/testrobots.php"

>>> request = Request(url, data.encode("cp1251"), headers=headers)

>>> res = urlopen(request)

>>> print(res.read().decode("cp1251"))

... Фрагмент опущен...

>>> res.close()

Определение кодировки

<meta http-equiv="Content-Type"

content="text/html; charset=windows-1251">

 

 

c:\python34\scripts\pip install chardet

 

 

>>> import chardet

>>> chardet.__version__

'2.3.0'

 

Листинг 21.14. Пример определения кодировки

>>> import chardet

>>> chardet.detect(bytes("Строка", "cp1251"))

{'confidence': 0.99, 'encoding': 'windows-1251'}

>>> chardet.detect(bytes("Строка", "koi8-r"))

{'confidence': 0.99, 'encoding': 'KOI8-R'}

>>> chardet.detect(bytes("Строка", "utf-8"))

{'confidence': 0.99, 'encoding': 'utf-8'}

 

Листинг 21.15. Пример использования класса UniversalDetector

from chardet.universaldetector import UniversalDetector

ud = UniversalDetector() # Создаем объект

for line in open("file.txt", "rb"):

ud.feed(line) # Передаем текущую строку

if ud.done: break # Прерываем цикл, если done == True

ud.close() # Закрываем объект

print(ud.result) # Выводим результат

input()

Сжатие данных



Поделиться:


Последнее изменение этой страницы: 2016-06-23; просмотров: 290; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.202.187 (0.043 с.)