Установка библиотеки requests для python на windows 8
Здравствуйте. У меня проблема. Не получается установить библиотеку requests. На сайте есть способы установки, для установки можно воспользоваться утилитой pip, но на Windows этим пользоваться крайне неудобно (у меня не получилось). Я попробовал скачать код, но собрать воедино множество файлов не получилось. Есть ли кто-нибудь, кто установил эту библиотеку? Дайте совет.
P.S Простите за такой глупый вопрос, просто я только недавно начал осваивать Python
Ссылка на эту библиотку на хабре
Ссылка на сайт поддержки библиотеки
- Вопрос задан более трёх лет назад
- 25763 просмотра
Комментировать
Решения вопроса 1
Архитектор ИС
Pip вполне удобен в windows среде
Запустите коммандер cmd.exe
Далее идите в каталог
cd \Python27\scripts
pip install requests или easy_install requests
Ответ написан более трёх лет назад
Нравится 5 1 комментарий
daniel1 @daniel1 Автор вопроса
Если у меня версия языка 3.3, то соответствующая папка — Python33\Tools\Scripts?
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +2 ещё
Дали задание на стажировку, не могу понять сами данные, какие данные пихать в метрики?
- 1 подписчик
- 2 часа назад
- 94 просмотра
Библиотека Requests Python

Научитесь использовать все прикладные инструменты из функционала MS Excel.
Библиотека Requests в Python — модуль для исполнения HTTP-запросов. Имеет простой и удобный интерфейс для отправки и получения ответов от серверов. Сам Питон — интерпретируемый, высокоуровневый язык программирования, разработанный в конце 1980-х годов и впервые выпущенный в 1991-м. Его главный создатель — Гвидо ван Россум.
С помощью инструмента можно выполнять различные типы запросов, такие как GET, POST, PUT, DELETE и другие. Доступна передача параметров, заголовков, данных форматов, файлов. Ниже рассмотрим, как установить / подключить, каким образом работать, как импортировать, в чем плюсы и минусы.
Содержание скрыть
Как установить библиотеку requests в python
Первым шагом разберитесь, как установить библиотеку Requests в Python. Задействуйте простой инструмент управления пакетами pip:
- Убедитесь, что Питон установлена на компьютере или ноутбуке. Для проверки выполните команду python –version или python3 –version в командной строке. Если ПО не установлено, требуется загрузить и инсталлировать его с официального сайта (https://www.python.org).
- Откройте командную строку или терминал на компьютере.
- Пройдите процесс установки, выполнив следующую команду — pip install requests. Если стоит несколько версий, и задача — поставить инструмент определенного типа, используйте упомянутую выше команду. В некоторых случаях помогает python -m pip / python3 -m pip install requests, если базовая pip не работает.
- Дождитесь загрузки и установки зависимостей.
Разобравшись, как подключить библиотеку Requests Python, можно использовать ее в программных проектах. При этом доступно 100% функций для исполнения запросов HTTP.
Работа с библиотекой
В состав функций и возможностей для работы с HTTP-запросами входят следующие:
- выполнение базового GET-запроса;
- передача параметров запроса;
- отправка заголовков;
- передача данных в POST-запросе;
- работа с JSON-данными;
- обработка исключений;
- работа с файлами;
- управление cookies.
Это лишь несколько примеров работы с библиотеки Requests Python. В реальности она предоставляет больше функций: установка таймаута, управление сеансами, отправка файлов с помощью multipart/form-data и другие. Ознакомьтесь с документацией для получения полного списка опций и дополнительной информации.

Научитесь использовать все прикладные инструменты из функционала MS Excel.
Как импортировать библиотеку в Python
Перед тем как импортировать библиотеки Requests в Python, разберитесь с возможностями ключевого слова import. Сначала используйте стандартную команду. После выполнения инструкции задействуйте функции и классы в своем коде. Например, выполните GET-запрос следующим образом:
Доступны альтернативные варианты импорта, если интересуют конкретные опции или классы:
from requests import get
Этот вариант позволяет использовать только функцию get без указания префикса requests.
При импорте убедитесь, что софт установлен на компьютере или ноутбуке. По какой инструкции сделать работу, и как работать с библиотекой Requests Python, указано выше.
Как подключить библиотеку Requests в Python, плюсы и минусы
Процесс подключения модуля проходит по схеме, которая рассмотрена выше. Для его использования требуется загрузить ПО, использовать командную строку и команду, которая указана в упомянутом разделе. После выполнения инструкции инструмент подключен и готов к использованию для выполнения HTTP-запросов и обработки ответов.
Перед применением важно знать слабые и сильные стороны, которые влияют на выбор программиста.
- простота использования, интуитивно понятный интерфейс для выполнения HTTP-запросов;
- удобство и гибкость, много функций и возможностей для взаимодействия с запросами, включая передачу параметров, заголовков, отправку данных, управление cookies;
- читабельность и лаконичность кода, продуманный и простой синтаксис;
- отличная документация, которая подробно описывает особенности;
- активное сообщество разработчиков, что позволяет легко найти помощь, документацию и примеры кода, а также получить обновления и исправления ошибок;
- поддержка различных методов HTTP, таких как GET, POST, PUT, DELETE и других;
- возможность работы с сессиями, что позволяет установить постоянное состояние (например, сохранить cookies) между несколькими запросами;
- автоматическая проверка SSL-сертификатов при выполнении HTTPS-запросов;
- легкость интеграции с другими библиотеками и фреймворками Питон, такими как BeautifulSoup для парсинга HTML или JSON, или Pandas для анализа данных;
- работа на многих платформах и операционных системах, включая Windows, macOS и Linux;
- встроенные ограничения, которые могут оказаться неподходящими для определенных сценариев;
- сложности с генерацией исключений при некоторых типах ошибок: подключения или истечение времени ожидания.
- требования к производительности и сложности при обработке большого объема данных (больше подходят низкоуровневые библиотеки, такие как aiohttp или Twisted);
- ограниченная поддержка асинхронности операций в более старых версиях;
- больший объем зависимостей, которые могут устанавливаться с рассматриваемым инструментом (увеличивает объем проекта);
- ориентация на работу с протоколом HTTP/1.1 и сложности при использовании более новых вариантов;
- ограниченная поддержка WebSocket и необходимость выбора других помощников;
- недостаток возможностей в настройке прокси.
Инструмент популярен и активно применяется для работы с HTTP-запросами в Питон. Как и у любой библиотеки, есть ограничения и ситуации, когда другие варианты больше подходят для выполнения поставленных задач. Важно оценивать потребности и нюансы проекта при выборе помощника.
Заключение
Библиотека Requests в Python — мощный инструмент для выполнения HTTP-запросов и работы с веб-сервисами. Предлагает простой и удобный интерфейс для выполнения запросов, а также широкий выбор функций для управления и обработки HTTP-взаимодействий. Софт прост в использовании, имеет продуманную документацию, активное сообщество и ряд ограничений.

Научитесь использовать все прикладные инструменты из функционала MS Excel.
Как использовать модуль Requests в Python
Рассказываем о том, как работают библиотеки Requests и как устроены HTTP-запросы.

Игорь Перепилицын
Автор статьи
13 сентября 2022 в 18:13
Requests — это модуль для языка Python, который используют для упрощения работы с HTTP-запросами. Он удобнее и проще встроенного Urllib настолько, что даже в документации Python рекомендовано использовать Requests.
Установка библиотеки Requests
Самый простой вариант установки сторонних пакетов в Python — использовать pip — систему управления пакетами. Обычно pip предустанавливается вместе с интерпретатором. Если его нет — можно скачать. Для этого нужно ввести в командную строку:
Linux / MacOS
python -m ensurepip --upgrade
Windows
py -m ensurepip --upgrade
Когда pip установлен, для установки модуля Requests нужно ввести команду:
pip install requests
Как настроить библиотеку Requests. Библиотека не требует дополнительной настройки — ею можно сразу же пользоваться.
Начало работы. Давайте рассмотрим пример простейшего запроса в модуле Requests:
import requests # делаем запрос на чтение страницы https://sky.pro/media/ response = requests.get('https://sky.pro/media/') print(response.ok) # проверяем успешен ли запрос? print(response.text) # выводим полученный ответ на экран
А вот как сделать то же самое, но при помощи встроенной библиотеки Urllib:
from urllib.request import urlopen # открываем запрос на чтение страницы http://sky.pro/media with urlopen('http://sky.pro/media') as response: response_status = response.status # сохраняем статус запроса в переменную html = response.read() # вычитываем ответ в переменную print(response_status == 200) # проверяем успешен ли запрос print(html.decode()) # выводим полученный ответ на экран
Модуль Requests в Python упрощает и автоматизирует многие действия, которые в стандартной библиотеке надо делать самостоятельно. Именно за это её любят и используют многие разработчики.
Подробнее об этом — на курсе «Python-разработчик». А еще под руководством опытных преподавателей освоите основные инструменты для работы, составите портфолио из интересных проектов и получите диплом установленного образца.
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Давайте разберёмся, как работать с Requests, и из чего состоят HTTP-запросы.
Методы HTTP-запросов
HTTP — это протокол передачи информации в интернете. Он описывает правила и формат общения между двумя сторонами. Например, как браузеру описать запрос, а серверу — сформировать ответ. HTTP — это текстовый протокол, поэтому его может прочитать и человек.
Давайте разберем простейший запрос:
GET /media/ HTTP/1.1 Host: sky.pro
Первая строка формирует запрос: мы говорим серверу, что хотим прочитать (GET) ресурс по адресу /media/. В конце указывается версия протокола: HTTP/1.1.
Начиная со второй строки передается дополнительная информация, которая называется заголовками. Она опциональная — кроме заголовка Host. Он указывает домен, на котором находится запрашиваемый ресурс.
HTTP-ответ выглядит аналогично:
HTTP/1.1 200 OK Content-Type: text/html
В первой строке указывается версия протокола и код ответа — статус, который описывает результат запроса. В следующих строках, так же, как и в запросе, перечисляются заголовки. В данном случае сервер говорит, что в ответе находится HTML-страница (Content-Type: text/html).
И в самом конце находится тело ответа: файл, HTML-страница или ничего. Браузер отрисовывает тело ответа — это уже то, что видит человек, когда загружает страницу.
Методы HTTP-запросов нужны, чтобы объяснить серверу, какое действие мы хотим совершить над ресурсом. Ресурс — это цель HTTP-запроса. Это может быть документ, фотография или просто веб-страница.
Как составлять HTTP-запросы, рассказывают на курсе «Веб-разработчик». Освоите технологии для позиционирования элементов на странице, узнаете, как подключить к проекту препроцессоры. Отточите навыки на создании четырех лендингов и положите эти проекты в портфолио.
Разберем на примерах распространённые методы — в чём их суть и чем они отличаются. Важно: ниже разбираются механизмы работы каждого метода в том виде, в котором они описаны в спецификации. На практике поведение может отличаться, но такое встречается нечасто.
OPTIONS
Метод OPTIONS нужен, чтобы спросить сервер о том, какие методы поддерживает ресурс. Он редко используется напрямую, обычно вызывается браузером автоматически. Поддерживается не всеми сайтами/ресурсами. Пример:
HTTP-ответ выглядит аналогично:
import requests response = requests.options('https://httpbin.org') print(response.text) # будет пустым print(response.headers['Allow']) # 'HEAD, GET, OPTIONS'
GET
GET — самый распространённый HTTP-метод. Его используют для чтения интернет-ресурса. Браузер отправляет метод GET, когда мы открываем какой-либо сайт. Пример:
import requests response = requests.get('https://httpbin.org/get') print(response.text)
POST
Метод POST используют для отправки на сервер данных, которые передаются в теле запроса. Для этого при вызове requests.post() надо указать аргумент data, который принимает на вход словарь, список кортежей, байты или файл.
Если для передачи данных используется формат JSON, вместо data можно указать json. Это просто удобная конвенция, которая правильно формирует отправляемый запрос. Пример:
import requests data_response = requests.post('https://httpbin.org/post', data=) print(data_response.text) # переданные данные находятся по ключу form json_response = requests.post('https://httpbin.org/post', json=) print(data_response.text) # ключ form пустой, теперь данные лежат в json
HEAD
Этот метод очень похож на GET — с той лишь разницей, что HEAD возвращает пустое тело ответа. Он нужен, когда нужно посмотреть только на заголовки, не загружая ответ целиком.
Например, мы хотим иметь свежую версию PDF-файла с расписанием автобусов. Файл хранится на каком-то сайте и периодически обновляется. Вместо того, чтобы каждый раз скачивать и сверять файл вручную, можно использовать метод HEAD. Он поможет быстро проверить дату изменения файла по заголовкам ответа.
import requests response = requests.get('https://httpbin.org/head') print(response.text) # ответ будет пустым print(response.headers)
PUT
Метод PUT очень похож на POST — с той разницей, что несколько последовательных вызовов PUT должны приводить к одному и тому же результату.
POST этого не гарантирует и может привести к неожиданным результатам, например к дублированию созданной сущности.
import requests response = requests.put('https://httpbin.org/put', data=) print(response.text)
PATCH
PATCH аналогичен методу POST, но с двумя отличиями: он используется для частичных изменений ресурса и его нельзя использовать в HTML-формах.
В теле запроса передается набор модификаций, которые надо применить.
import requests response = requests.patch('https://httpbin.org/patch', data=) print(response.text)
DELETE
Метод используется для удаления ресурса. Поддерживает передачу данных, однако не требует её: тело запроса может быть пустым.
Как и PUT, последовательный вызов DELETE должен приводить к одному и тому же результату.
import requests response = requests.delete('https://httpbin.org/delete') print(response.text)
HTTP-коды состояний
Каждый ответ HTTP-запроса обязательно имеет код состояния — трехзначное число, которое как-то характеризует полученный результат. По этому коду можно понять, всё ли успешно отработало, и если произошла ошибка, то почему.
Подробнее об этом рассказывают на курсе «Веб-разработчик». Уделяйте учебе всего три часа в день, чтобы стать настоящим профессионалом. Сможете верстать сайты, адаптировать их под разные устройства и работать с кодом. После обучения в портфолио будет восемь проектов, а еще получите диплом установленного образца.
Всего выделяют пять групп кодов состояний:
1хх-коды.
К этой группе относятся информационные коды состояний. Они сообщают клиенту о промежуточном статусе запроса и не являются финальным результатом.
Их немного, и останавливаться на них мы не будем, потому что они встречаются нечасто.
2хх-коды.
Коды из этой группы означают, что запрос принят и обработан сервером без ошибок:
- 200 OK — запрос выполнен успешно. Чаще всего встречается именно это число.
- 201 Created — в результате запроса был создан новый ресурс. Как правило, этим кодом отвечают на POST- и иногда PUT-запросы.
- 202 Accepted — запрос принят, но ещё не выполнен. Используется, когда по какой-то причине сервер не может выполнить его сразу. Например, если обработку делает какой-то сторонний процесс, который выполняется раз в день.
- 204 No Content — указывает, что тело ответа пустое, но заголовки могут содержать полезную информацию. Не используется с методом HEAD, поскольку ответ на него всегда должен быть пустым.
3хх-коды.
Это группа кодов перенаправления. Это значит, что клиенту нужно сделать какое-то действие, чтобы запрос продолжил выполняться:
- 301 Moved Permanently — URL запрашиваемого ресурса изменился, новый URL содержится в ответе.
- 302 Found — аналогичен предыдущему коду. Отличие в том, что URL изменился временно. При этом статусе состояния поисковые системы не будут менять ссылку в своей поисковой выдаче на новую.
- 304 Not Modified — означает, что содержимое ресурса было закешировано, его содержимое не поменялось и запрос можно не продолжать.
4хх-коды.
Это коды ошибок, которые допустил клиент при формировании запроса:
- 400 Bad Request — запрос сформирован с ошибкой, поэтому сервер не может его обработать. Причин может быть много, но чаще всего ошибку надо искать в теле запроса.
- 401 Unauthorized — для продолжения необходимо залогиниться.
- 403 Forbidden — пользователь залогинен, но у него нет прав для доступа к ресурсу.
- 404 Not Found — всем известный код: страница не найдена. Некоторые сайты могут возвращать 404 вместо 403, чтобы скрыть информацию от неавторизованных пользователей.
- 405 Method Not Allowed — данный ресурс не поддерживает метод запроса. Например, так бывает, если разработчик хочет отправить PUT-запрос на ресурс, который его не поддерживает.
- 429 Too Many Requests — означает, что сработал защитный механизм: он ограничивает слишком частые запросы от одного пользователя. Таким образом защищаются от DDoS- или brute-force-атак.
5хх-коды.
Это ошибки, которые возникли на сервере во время выполнения запроса:
- 500 Internal Server Error — на сервере произошла неожиданная ошибка. Как правило, происходит из-за того, что в коде сервера возникает исключение.
- 502 Bad Gateway — возникает, если на сервере используется обратный прокси, который не смог достучаться до приложения.
- 503 Service Unavailable — сервер пока не готов обработать запрос. В ответе также может содержаться информация о том, когда сервис станет доступен.
- 504 Gateway Timeout — эта ошибка означает, что обратный прокси не смог получить ответ за отведенное время (обычно — 60 секунд).
Заголовки, текст ответа и файлы Cookie
Теперь рассмотрим, как работать с запросами и ответами в Requests. Чтобы увидеть результат HTTP-запроса, можно использовать один из трех способов.
Выбор способа зависит от того, какие данные мы получили. В непонятной ситуации можно использовать атрибут text, который возвращает содержимое в виде строки:
import requests response = requests.get('https://httpbin.org/get') print(response.text)
Если заранее известно, что ответ будет в формате JSON, можно использовать одноименный атрибут, который автоматически распарсит ответ и вернет его в виде словаря:
json_response = response.json() print(json_response)
Обратите внимание, как изменится вывод функции print().
Наконец, если ответом на запрос является файл, стоит использовать атрибут content, который возвращает байты:
import requests response = requests.get('https://httpbin.org/image/jpeg') print(response.content)
Попробуйте вывести на экран response.text для предыдущего запроса и сравните результат.
Заголовок — это дополнительная информация, которой обмениваются клиент и сервер. В заголовках могут содержаться: размер ответа (Content-Length), формат передаваемых данных (Content-Type) или информация о клиенте (User-Agent).
Полный список очень длинный, знать их все необязательно, а часть и вовсе подставляется автоматом. Например, модуль Requests зачастую сам проставляет Content-Type — формат передаваемых данных.
Заголовок состоит из названия и значения, которые разделяются двоеточием, поэтому удобнее всего передавать их в виде словаря. Рассмотрим на примере, как это работает:
import requests response = requests.get('https://httpbin.org/image', headers=) print(response.headers)
Здесь мы передали заголовок, который указывает, в каком формате мы хотим получить изображение. Попробуйте поменять значение на image/png и посмотрите, как изменится ответ.
Так же можно посмотреть и на заголовки запроса:
print(response.request.headers)
Обратите внимание, что Requests сам подставил информацию о клиенте — User-Agent.
Cookie (куки) — это информация, которую сервер отправляет браузеру для хранения. Они позволяют зафиксировать некоторое состояние. Например, в куки может храниться информация о том, что пользователь уже залогинен. Она хранится в браузере и передается на сервер при каждом запросе, поэтому нам не нужно каждый раз проходить авторизацию заново.
Работать с куками в модуле Requests очень просто:
import requests response = requests.get('https://httpbin.org/cookies', cookies=) print(response.text)
Посмотреть, какие куки пришли от сервера, можно при помощи атрибута cookies объекта Response:
print(response.cookies)
Как отправлять запросы при помощи Python Requests
Рассмотрим несколько частых примеров использования модуля Requests, чтобы понять, как отправлять запросы.
Скачивание файлов
import requests response = requests.get('https://www.python.org/static/img/python-logo.png') with open('python_logo.png', 'wb') as image: image.write(response.content)
Выше описан не самый эффективный способ скачивания файлов. Если файл окажется большого размера, код выше загрузит результат целиком в оперативную память. В лучшем случае программа упадет с ошибкой, в худшем — всё намертво зависнет.
Вот как это можно исправить:
import requests response = requests.get('https://www.python.org/static/img/python-logo@2x.png', stream=True) with open('python_logo.png', 'wb') as image: for chunk in response.iter_content(chunk_size=1024): image.write(chunk)
В этом варианте мы используем параметр stream=True, который открывает соединение, но не скачивает содержимое. Затем мы задаем размер чанка — кусочка информации, который будет скачиваться за одну итерацию цикла, и делаем его равным 1 Кб (1024 байт). Модуль Requests сам закрывает соединение после прочтения последнего чанка.
Чтобы заранее узнать размер файла, можно воспользоваться методом HEAD. Эта информация передается в заголовке ‘Content-Length’ и исчисляется в байтах.
import requests head_response = requests.head('https://www.python.org/static/img/python-logo@2x.png') image_size = int(head_response.headers['Content-Length']) print('Размер загружаемого файла: кб'.format(image_size / 1024))
Авторизация на сайте
Рассмотрим два способа авторизации, которые встречаются чаще всего: Basic Auth и Bearer Auth. В обоих случаях механизм очень похожий — запрос должен передать заголовок ‘Authorization’ с каким-то значением. Для Basic Auth — это логин и пароль, закодированные в base64, для Bearer — токен, который мы получили на сайте заранее.
Для базовой авторизации у модуля Requests есть очень удобный параметр auth=, который делает всю работу за нас:
import requests response = requests.get('https://httpbin.org/basic-auth/foo/bar') print(response.status_code) # 401 response = requests.get('https://httpbin.org/basic-auth/foo/bar', auth=('foo', 'bar')) print(response.status_code) # 200 print(response.request.headers[‘Authorization’]) # 'Basic Zm9vOmJhcg=='
Обратите внимание, что модуль Requests сам добавил заголовок Authorization и подставил туда закодированные логин и пароль.
Для Bearer Auth нам придется добавлять его самостоятельно:
import requests response = requests.get('https://httpbin.org/bearer') print(response.status_code) # 401 headers = response = requests.get('https://httpbin.org/bearer', headers=headers) print(response.status_code) # 200
У каждого API своя спецификация — вместо Bearer может быть Token или что-то другое. Поэтому важно внимательно читать документацию сервиса.
Мультискачивание
Напишем код, который умеет скачивать сразу несколько файлов. Для этого вынесем работу с модулем Requests в отдельную функцию и параметризируем место сохранения файла.
Не забывайте про сохранение файла по чанкам, чтобы крупные файлы не загружались в память целиком.
import requests def download_file(url, save_path): response = requests.get(url, stream=True) with open(save_path, 'wb') as file: for chunk in response.iter_content(chunk_size=1024): file.write(chunk) download_list = [ 'https://cdn.pixabay.com/photo/2022/04/10/19/33/house-7124141_1280.jpg', 'https://cdn.pixabay.com/photo/2022/08/05/18/50/houseplant-7367379_1280.jpg', 'https://cdn.pixabay.com/photo/2022/06/09/04/53/ride-7251713_1280.png', ] for url in download_list: save_path = url.split('/')[-1] download_file(url, save_path)
Не устанавливается модуль requests для python
Ось – Win7. При попытке установить requests через pip install requests в консоли все выходит, однако при дальнейшей попытке подключить через import requests idle или visual studio выдает ошибку об отсутствии модуля. Есть варианты решения?
Отслеживать
задан 9 ноя 2018 в 14:31
user315337 user315337
11 2 2 бронзовых знака
Возможно, у вас несколько версий python стоит — в одну установили requests , а в другой пытались импортировать. Посмотрите переменные окружения в PATH какие пути ведут в папку с питоном к pip
9 ноя 2018 в 15:36
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Предлагаю убедиться в том, что установка прошла успешно, для начала: pip list в командной строке и посмотреть что вообще установлено.
Так же можно сохранить файл скрипта в текстовом редакторе и запустить его из командной строки.
Еще нужно зайти в Свойства системы → Дополнительно → Переменные среды и убедится в наличии и корректности питоновской PATH
Отслеживать
ответ дан 9 ноя 2018 в 15:17
93 7 7 бронзовых знаков
С idle или visual studio я не работал, но в pycharm иногда натыкаюсь на такое поведения, если для проекта настроена не та версия питона, для которой выполнялась установка пакета.
Убедитесь, что версии совпадают. Скорее всего, в ваших IDE настроена третья версия питона, а pip ставил пакет для второй версии.
Если это так, нужно выполнить такую же установку через pip3.
Отслеживать
ответ дан 9 ноя 2018 в 15:28
20.4k 4 4 золотых знака 25 25 серебряных знаков 52 52 бронзовых знака
попробуйте py -m pip install reques
Отслеживать
ответ дан 15 дек 2023 в 14:03
исправьте, пожалуйста, опечатку, и опишите, чем ваш ответ принципиально отличается от предыдущих. (для этого надо нажать ссылку править ниже текста ответа).