Заполнение кудир: Заполнение и ведение КУДиР на УСН 6 % в 2022 году — Контур.Бухгалтерия

Содержание

КУДиР для ИП на УСН и патенте в 2021 — Контур.Эльба — СКБ Контур

    В КУДиР записывают все операции, которые влияют на расчет налога по УСН. Сдавать книгу нужно только по запросу налоговой.

    1.

    Зарегистрируйтесь в сервисе и добавьте операции по расчётному счёту
    и кассе — вручную или по интеграции.

    2.

    Эльба автоматически заполнит КУДиР — добавит в неё ваши доходы
    и расходы по УСН.

    3.

    Скачайте готовую книгу в любое время, чтобы передать в банк
    или налоговую.

    Сделать первый шаг

    Отчётность без бухгалтера

    Документы за пару кликов

    Готовые платёжки

    по налогам


    Что такое книга учета доходов и расходов

    Это книга, в которой вы ведёте летопись доходов и трат вашего бизнеса.
    Запись ведут по хронологии появления платёжек, накладных, актов и других документов. Её можно
    вести на бумаге или электронно.

    ИП на УСН и патенте ведут КУДиР в течение года, а после заводят
    новую. В конце года книгу нужно распечатать, прошить, пронумеровать листы, заверить подписью
    и печатью и хранить пять лет. В конце неё указывают количество листов.

    Книгу показывают инспектору, если у него появились вопросы по учтённым вами
    операциям, вместе с отчётом её не подают.

    Как заполнять КУДиР

    Рассказываем, по каким правилам действовать, если у вас есть время и терпение,
    чтобы заполнять КУДиР вручную. Книга состоит из титульника и 5 разделов. ИП на УСН «Доходы»
    заполняют I, IV и V разделы, а на УСН «Доходы минус расходы» — I, II и III.

    • Раздел I. Записывайте в нём поступления наличных и безнала, которые относятся
      к вашей деятельности. Такие доходы указаны в ст. 346.15 НК РФ.

    • Раздел II. Добавьте в него ваши траты. Учитывайте их после окончания сделки, когда
      работа выполнена и оплачена. Все расходы указаны в ст. 346.16 НК РФ.

    • Раздел III. Покажите здесь убытки прошлых лет.

    • Раздел IV. Укажите уплату больничных за ваш счёт и страховые взносы
      за себя и сотрудников.

    • Раздел V. Заполните, если получаете субсидию или платите торговый сбор.

    Форма КУДиР

    Штрафы

    Кажется, что КУДиР не самый обязательный документ, раз её не нужно
    сдавать вместе с декларацией. Но это не так. Если цифры в декларации
    показались налоговому инспектору странными, он запросит КУДиР и проверит,
    правильно ли рассчитан налог. А ещё книга иногда нужна банкам. Поэтому её стоит
    всегда держать наготове.

    Если ФНС попросит книгу, а предприниматель не уложится в указанный
    инспектором срок и передаст КУДиР позже, то получит штраф — 200 ₽. За ошибки
    в заполнении будет штраф побольше — от 10 000 ₽ до 30 000 ₽.
    А если обнаружится занижение налога, придётся заплатить 20% от неуплаченной суммы,
    но не меньше 40 000 ₽.

    Про КУДиР в видеоформате

    Разобраться с заполнением КУДиР поможет видео от Маши, она рассказала: кому
    и для чего нужна книга, как ее сшивать, заполнять и сдавать.

    Новым ИП — год Эльбы в подарок

    Начинающие ИП могут сформировать КУДиР бесплатно — Эльба дарит год
    на тарифе Премиум всем предпринимателям, которые зарегистрировались меньше трёх месяцев назад.

    Получить год в подарок


    Попробовать бесплатно

    Вам откроются все возможности тарифа Премиум. Бесплатно сдавайте отчёты, рассчитывайте налоги, создавайте счета, акты и накладные.

    Учет и КУДИР при ведении обособленного подразделения

    Размер шрифта

    Обычная версия

    20. 05.2022


    Вопрос от Валерии Григорьевны, ИП

    Учет и КУДИР при ведении обособленного подразделения и головного предприятия при регистрации в одном налоговом органе и субъекте РФ. Как происходит учёт расходов при системе: поступление товара на обособленное подразделение, а оплата по головному предприятию.


    Ответ Soft+


    Формирование и заполнение КУДИР производится по головной организации, без разбивки по подразделениям (обособленным филиалам).


    Наличие у «упрощенца» обособленного подразделения (не филиала) не является противопоказанием для применения им УСНО, но налагает дополнительные обязанности, предусмотренные налоговым законодательством,

    • проинформировать налоговую инспекцию о создании такого подразделения,
    • правильно рассчитать и внести «зарплатные» платежи, а также подать отчеты по ним.


    Неисполнение этих обязанностей чревато для организации налоговыми штрафами. Чтобы их избежать, нужно четко понимать, когда и в каком случае у нее возникает обособленное подразделение (ОП), о котором надо сообщить налоговикам.


    В силу пп. 1 п. 3 ст. 346.12 НК РФ организации, имеющие филиалы, не вправе применять УСНО.


    Филиал — это обособленное подразделение юридического лица, расположенное вне места его нахождения и осуществляющее все его функции или их часть, в том числе функции представительства (п. 2 и 3 ст. 55 ГК РФ). Филиалы не являются юридическими лицами. Они наделяются имуществом создавшим их юридическим лицом и действуют на основании утвержденных им положений.


    Сведения о филиалах указываются в ЕГРЮЛ.


    Таким образом, организация, применяющая УСНО, в случае создания филиалов больше не вправе применять данный спецрежим. А при создании ОП, не являющихся филиалами, она вправе продолжать применение УСНО при соблюдении прочих условий, предусмотренных гл.  26. 2 НК РФ. Минфин в Письме от 28.04.2021 № 031106/2/32518 подчеркнул: само по себе создание обособленных подразделений (рабочих мест) вне места нахождения налогоплательщика не является препятствием для применения УСНО, если подразделениям не придан статус филиалов.


    Обособленное подразделение не является юридическим лицом и не может выступать стороной по договору (абз. 2 п. 1 ст. 2 ГК РФ, п. 3 ст. 55 ГК РФ).


    В целях бухгалтерского учета обособленное подразделение не является хозяйствующим субъектом (п. 1 ч. 1 ст. 2 Федерального закона от 06.12.2011 N 402-ФЗ).


    Исходя из этого, при реализации товаров (работ, услуг) обособленному подразделению в первичных документах поставщик указывает:

    • в качестве покупателя и плательщика — головную организацию;
    • в качестве грузополучателя (при реализации ТМЦ) — обособленное подразделение.


    Для облегчения ведения бухгалтерского учета именно таких организаций, разработали специальную программу «1С Бухгалтерия предприятия КОРП». Такая программа специализируется на учете организаций с большим количеством работников и с большим числом подразделений.


    Учет в программе полностью автоматизирован, а это значительно не только упрощает ведение бухгалтерского учета, но и экономит огромное количество времени бухгалтера и сводит допустимые ошибки в заполнении данных к минимальной отметке.

    Возврат к списку

    Заполнение веб-форм с помощью cURL и wget

    О боже, еще один пост с cURL и веб-формой! Я не мог не написать это. Находя информацию о formfind, я заметил отсутствие прямой помощи людям, желающим его использовать, поэтому я подумал, что восполню пробел на рынке.

    Вопросы, на которые отвечает этот пост:

    • Как заполнить онлайн-форму, не посещая веб-сайт?
    • Как отправить информацию в интерактивные формы с рабочего стола?
    • Как использовать Bash для заполнения онлайн-форм?
    • Как найти поля формы в исходном коде веб-сайта?
    • Как загрузить веб-страницу с помощью wget?
    • Как загрузить веб-страницу с помощью cURL?
    • Как использовать formfind?

    Заполнение веб-форм с помощью cURL и wget

    Чтобы заполнить веб-формы с помощью formfind, вам необходимо:

    • Скачать formfind
    • Загрузите исходный код страницы, содержащей форму
    • Используйте formfind для поиска полей формы
    • Используйте wget или cURL для заполнения формы

    Все это можно легко автоматизировать с помощью скрипта BASH.

    Как получить Formfind

    Есть два способа получить formfind:

    Загрузить вручную

    1. Загрузить Formfind с GitHub
    2. Скопируйте код в текстовый файл и сохраните его как formfind
    3. Сделайте скрипт исполняемым, щелкнув его правой кнопкой мыши, выбрав свойства и нажав «является исполняемым».

    Пусть Linux сделает всю работу за вас. Мы можем скачать Formfind с помощью инструкции в одну строку:

    1. Скопируйте и вставьте эту команду в терминал, чтобы загрузить форму на рабочий стол и сделать ее исполняемой:
       curl https://raw.githubusercontent.com/VR51/formfind/master/formfind.pl > ~/Desktop/formfind.pl ; chmod +x ~/Desktop/formfind.pl 

    Загрузка исходного кода

    Прежде чем вы сможете использовать formfind, вам необходимо загрузить исходный код веб-страницы, на которой находится форма, и сохранить код в текстовом файле. Вы можете сделать это с помощью wget или cURL.

    Используя wget:

     wget http://example. com > file.txt 

    Используя cURL

     curl http://example.com > file.txt 

    Если wget и cURL не установлены на вашем компьютере, вы можно установить с помощью:

     sudo apt-get build-dep wget curl; sudo apt-get install wget curl 

    Использование Formfind

    Formfind находит формы на HTML-страницах. Он записывает свой отчет на экран, если его вывод не перенаправляется в файл или другой скрипт.

    Formfind запускается из каталога, в котором он находится, путем ввода команды

     sh /formfind.pl 

    Если вы запускаете formfind из другого каталога, вам нужно будет указать путь к formfind после команды «sh».

    Чтобы передать исходный код из файла в formfind, введите

     sh /path-to-formfind/formfind.pl < /path-to-file/page.html 

    Например, если вы сохранили

    1. formfind на рабочий стол (formfind)
    2. Исходный код страницы формы, сохраненной на рабочем столе (file.txt)
    3. На вашем компьютере открыт терминал (Консоль)

    Вы должны использовать следующую команду для запуска formfind для поиска данных формы в файле. txt

     sh ~/formfind.pl < ~/Desktop/file.txt 

    Обратите внимание, что символ тильды (~) представляет домашний адрес активного пользователя каталог, а знак «меньше» (<) говорит Bash передать formfind любые данные в файле, записанном после него.

    Вывод Formfind будет выглядеть примерно так:

     --- Отчет FORM. Использует POST для URL "page-two.php"
    Ввод: ИМЯ="Имя" (ТЕКСТ)
    Ввод: ИМЯ="Возраст" (ТЕКСТ)
    Ввод: ИМЯ="Город" (ТЕКСТ)
    Ввод: NAME="Form_Submit" VALUE="Отправить" (ОТПРАВИТЬ)
    --- конец формы 

    Через несколько минут мы проанализируем этот отчет.

    Использование Formfind с wget и cURL для заполнения форм

    Как wget, так и cURL захватывают исходный код любой веб-страницы, которая их не блокирует. cURL выводит свой вывод на экран консоли, а wget сохраняет файлы в любой каталог, из которого он вызывается.

    Чтобы использовать wget для сохранения исходного кода со страницы, содержащей форму, например:

     wget https://example. com > ~/Desktop/page.txt 

    Чтобы использовать cURL для того же, вы использовал бы

     curl https://example.com > ~/Desktop/page.txt 

    Знак «больше» (>) используется, чтобы указать wget и cURL, куда отправлять вывод.

    Вам нужно написать две инструкции для передачи данных в formfind:

    1. Одна для использования wget или cURL загрузить веб-страницу с формой
    2. Один для передачи исходного кода страницы загрузки в formfind

    Например,

     curl https://example.com > ~/Desktop/page-one.html
    sh formfind.pl < ~/Desktop/page-one.html 

    Обе эти команды можно поместить в одну строку, разделив их точкой с запятой, например:

     curl https://example.com > ~/Desktop/page-one.html ; sh formfind.pl < ~/Desktop/page-one.html 

    Использовать formfind очень просто.

    Понимание отчета Formfind

    Взгляните на это изображение:

     

    Formfind: Скриншот отчета формы

    Это результат использования cURL и команды Formfind для сбора информации о форме.

    Он показывает следующие детали формы:

     --- Отчет ФОРМА. Использует POST для URL "page-two.php"
    Ввод: ИМЯ="Имя" (ТЕКСТ)
    Ввод: ИМЯ="Возраст" (ТЕКСТ)
    Ввод: ИМЯ="Город" (ТЕКСТ)
    Ввод: NAME="Form_Submit" VALUE="Отправить" (ОТПРАВИТЬ)
    --- end of FORM 

    Веб-формы HTML работают, позволяя пользователю нажимать кнопки, выбирать элементы из раскрывающихся меню или вводить информацию в текстовое поле и так далее. На самом деле, когда кто-то заполняет форму, он или она присваивает значения переменным. Это сложный способ сказать, что пользователь сообщает серверу, что «один ответ = кнопка один», «ответ два = выпадающий элемент три» и «ответ четыре = какое-то сообщение». Значения этих переменных подтверждаются, когда заполнитель формы нажимает «отправить». Затем эта информация обычно отправляется на другую страницу, которая обрабатывает данные формы.

    Пример формы имеет три текстовых поля, показанных на скриншоте:

    1. Имя
    2. Возраст
    3. Город

    Верхняя строка отчета formfind гласит:

     Отчет FORM.  Использует POST для URL "page-two.php" 

    Эта строка сообщает нам, что форма использует метод "post" для отправки данных на "page-two.php". Это означает, что данные формы обрабатываются page-two.php.

    Строки, начинающиеся с «Input: Name=», сообщают нам названия полей в форме. Эти заголовки на самом деле являются переменными. В данном случае переменные PHP. Цитируемые тексты являются их именами. Например, первая строка ввода

     Ввод: NAME="Name" (ТЕКСТ) 

    сообщает нам, что в форме есть поле под названием «Имя». Текст в скобках говорит нам, что это поле TEXT.

    Подводя итог, formfind считывает HTML-код веб-страницы для составления отчета обо всех формах, которые она содержит. Этот отчет сообщает нам адрес страницы, на которую форма отправляет данные для обработки, имена переменных, которые эта страница ожидает получить, тип информации, которую она ожидает от этих переменных, и — для раскрывающихся списков и полей выбора. – возможные значения, которые могут содержать эти переменные.

    Например, используя скриншот,

    1. Тестовая форма находится по адресу https://journalxtra.com/tutorials/php-data-passing/ page-one.html
    2. Его переменные: Имя , Возраст и Город
    3. Нажатие «Отправить» отправляет эти переменные на https://journalxtra.com/tutorials/php-data-passing/ page-two.php

    Название кнопки «Отправить» указывать не нужно. Когда мы заполняем форму с помощью wget или cURL, мы отправляем данные непосредственно на страницу, которая обрабатывает форму. По сути, wget и cURL выполняют работу кнопки отправки.

    Приведенные выше примеры URL больше не ведут на настоящие страницы. Я удалил страницы, когда перенес JournalXtra из Hostgator в Namecheap.

    Щелкните здесь, чтобы узнать, как создать веб-форму.

    Заполнение форм с помощью cURL

    cURL может как загружать веб-страницы, так и отправлять на них данные; который очень удобен для заполнения веб-форм. Мы используем следующий формат:

     curl -d [данные-формы] [форма-обработки-веб-страницы] 

    Параметр «-d» сообщает cURL, что он собирается передать данные, которые необходимо отправить на любой URL-адрес, указанный после данных.

    Чтобы отправить МОЕ имя (Ли) в форму, я мог бы написать:

     curl -d Name="Ли" https://example.com/page-two.php 

    Чтобы отправить мой возраст (смею раскрыть это!), я бы написал:

     curl -d Age="36" https://example.com/page-two.php 

    Чтобы отправить все три моих имени, возраста и города на page-two.php за один раз я бы написал:

     curl -d Name="Lee" -d Age="36" -d Town="The Internet" https://example.com/page-two.php 

    Последнее Команда отправляет мои ответы во все три поля прямо на страницу, которая обрабатывает данные формы (page-two.php).

    Важно цитировать ответы, чтобы cURL не путался в том, что его просят сделать. Например, если я укажу свой город как «Интернет», без кавычек cURL будет считать, что ответом на «Город» является «The», прежде чем он попытается отправить данные на хост с именем «Интернет».

    Альтернативой заключению в кавычки является использование процентного кодирования символов, имеющих обучающее значение для cURL, т. е. найти значение UTF8 любого специального символа и поставить перед ним знак процента, например, %20 — это символ пробела.

    Когда вы заполняете форму с помощью cURL, cURL записывает ответ сервера для заполненной формы на ваш экран. Вы можете перенаправить его в файл со знаком больше (>). Например,

     curl -d Name="Lee" -d Age="36" -d Town="The Internet" https://example.com/page-two.php > ~/Desktop/form-response. html 

    Щелкните здесь, чтобы узнать больше о заполнении форм с помощью cURL.

    Заполнение форм с помощью wget

    Это работает практически так же, как и для cURL, за исключением того, что данные формы выражаются немного по-другому. На этот раз мы используем формат:

     wget --post-data 'Name=Value' http://example.com 

    Различия, о которых вам необходимо знать:

    1. wget использует «–post-data» вместо «-d» cURL. опция
    2. wget объединяет несколько значений переменных с помощью амперсанда (&)

    Например,

     wget --post-data 'Name=Lee&Age=36&Town=The%20Internet' https://example.com/page-two.php 

    Обратите внимание, что пространство, используемое в «Интернете», заменен на %20.

    Амперсанд, используемый как часть ответа поля, будет заменен на %26.

    Например,

     --post-data "Name=Me%20%26%20&Age=36..." 

    Обратите внимание, что cURL также допускает объединение данных формы в одну строку с помощью амперсанда, такого как curl - d «Имя=Ли&Возраст=36…».

    Сводка

    Вы можете использовать либо cURL, либо wget для заполнения веб-форм без использования веб-браузера. Метод

    1. Загрузите страницу формы с помощью curl или wget
    2. Подача загруженной страницы в formfind
    3. Изучите отчет formfind, чтобы получить имя страницы, которая обрабатывает форму
    4. Изучите отчет formfind, чтобы получить имена полей, содержащихся в форме
    5. Используйте cURL или wget для отправки данных на страницу процессора

    Например, cURL

    1. Загрузите formfind на рабочий стол и сделайте из него исполняемый скрипт
       curl https://raw. githubusercontent.com/VR51/formfind/master/formfind.pl > ~/Desktop/formfind.pl ; chmod +x ~/Desktop/formfind.pl 
    2. Загрузите страницу формы в файл с именем page-one.html на рабочем столе.
       завиток https://example.com/form.html > ~/Desktop/page-one.html 
    3. Подайте form.html в formfind
       ш ~/Desktop/formfind.pl < ~/Desktop/form.html 
    4. Проверить вывод
       --- ФОРМА отчета. Использует POST для URL-адреса «form-data.php»
      Ввод: ИМЯ="Имя" (ТЕКСТ)
      Ввод: ИМЯ="Возраст" (ТЕКСТ)
      Ввод: ИМЯ="Город" (ТЕКСТ)
      Ввод: NAME="Form_Submit" VALUE="Отправить" (ОТПРАВИТЬ)
      --- конец формы 
    5. Отправьте ответ на страницу POST to URL (например, form-data.php), используя показанные заголовки полей, и запишите ответ в файл (например, response.html) на рабочем столе.
       curl -d Name="Lee" -d Age="36" -d Town="The Internet" https://example.com/form-data.php > ~/Desktop/form-response.html 

    Я надеюсь, что это руководство помогло вам научиться использовать cURL, wget и formfind для заполнения веб-форм. Пожалуйста, дайте мне знать ваши результаты.

    Авторские права защищены Digiprove © 2011Все права защищены

    Делиться заботой!

    7
    акции

    Искусство написания сценариев HTTP-запросов с помощью Curl

    curl / Docs / Tool / HTTP-скрипты

    История вопроса

    Этот документ предполагает, что вы знакомы с HTML и общими сетевыми технологиями.

    Увеличение количества приложений, перемещаемых в Интернет, привело к тому, что "Сценарии HTTP" стали более востребованными и востребованными. Иметь возможность автоматически извлекать информацию из Интернета, подделывать пользователей, публиковать или загружать данные на веб-серверы — все это важные задачи сегодня.

    Curl — это инструмент командной строки для выполнения всех видов манипуляций с URL-адресами и их передачи, но в этом конкретном документе основное внимание будет уделено тому, как использовать его при выполнении HTTP-запросов для развлечения и получения прибыли. Я предполагаю, что вы знаете, как вызвать curl --help или curl --manual , чтобы получить основную информацию об этом.

    Программа Curl не предназначена для того, чтобы делать все за вас. Он делает запросы, получает данные, отправляет данные и извлекает информацию. Вероятно, вам нужно склеить все вместе, используя какой-то скриптовый язык или повторяющиеся ручные вызовы.

    Протокол HTTP

    HTTP — это протокол, используемый для получения данных с веб-серверов. Это простой протокол, основанный на TCP/IP. Протокол также позволяет отправлять информацию на сервер от клиента, используя несколько различных методов, как будет показано здесь.

    HTTP представляет собой простые текстовые строки ASCII, отправляемые клиентом на сервер для запроса определенного действия, а затем сервер отвечает несколькими текстовыми строками, прежде чем фактическое запрошенное содержимое будет отправлено клиенту.

    Клиент curl отправляет HTTP-запрос. Запрос содержит метод (например, GET, POST, HEAD и т. д.), ряд заголовков запроса и иногда тело запроса. HTTP-сервер отвечает строкой состояния (указывающей, все ли прошло хорошо), заголовками ответа и чаще всего также телом ответа. Часть «тело» — это запрошенные вами простые данные, такие как фактический HTML или изображение и т. д. команд, которые curl отправляет на сервер, а также несколько других информационных текстов.

    --verbose — самая полезная опция, когда дело доходит до отладки или даже понимания взаимодействия curl<->сервера.

    Иногда даже --verbose недостаточно. Затем --trace и --trace-ascii предлагают еще больше подробностей, поскольку они показывают все, что curl отправляет и получает. Используйте его так:

     curl --trace-ascii debugdump.txt http://www.example.com/
     

    См. тайминг

    Много раз вы можете задаться вопросом, что именно занимает все время, или вы просто хотите знать количество миллисекунд между двумя точками в передаче. Для тех и других подобных ситуаций --trace-time — это то, что вам нужно. Он будет добавлять время к каждой строке вывода трассировки:

     curl --trace-ascii d.txt --trace-time http://example.com/
     

    См. ответ

    По умолчанию curl отправляет ответ на стандартный вывод. Вам нужно перенаправить его куда-нибудь, чтобы избежать этого, чаще всего это делается с помощью -o или -O .

    Spec

    Формат унифицированного указателя ресурсов определяет адрес конкретного ресурса в Интернете. Вы знаете это, вы видели такие URL-адреса, как https://curl.se или https://example.com, миллион раз. RFC 3986 - каноническая спецификация. И да, официальное имя не URL, а URI.

    Хост

    Имя хоста обычно преобразуется с помощью DNS или вашего файла /etc/hosts в IP-адрес, и это то, с чем curl будет взаимодействовать. В качестве альтернативы вы указываете IP-адрес непосредственно в URL-адресе вместо имени.

    Для разработки и других тестовых ситуаций вы можете указать другой IP-адрес для имени хоста, чем тот, который использовался бы в противном случае, с помощью curl --resolve вариант:

     curl --resolve www. example.org:80:127.0.0.1 http://www.example.org/
     

    Номер порта

    Каждый поддерживаемый curl протокол работает с номером порта по умолчанию, будь то TCP или, в некоторых случаях, UDP. Обычно вам не нужно принимать это во внимание, но иногда вы запускаете тестовые серверы на других портах или подобных. Затем вы можете указать номер порта в URL-адресе с двоеточием и номером сразу после имени хоста. Например, при выполнении HTTP на порт 1234:

     завиток http://www.example.org:1234/
     

    Номер порта, который вы указываете в URL-адресе, — это номер, который сервер использует для предоставления своих услуг. Иногда вы можете использовать прокси-сервер, и тогда вам может потребоваться указать номер порта этого прокси-сервера отдельно от того, какой curl должен подключиться к серверу. Например, при использовании HTTP-прокси на порту 4321:

     curl --proxy http://proxy.example.org:4321 http://remote.example.org/
     

    Имя пользователя и пароль

    Для некоторых служб требуется HTTP-аутентификация, после чего вам необходимо указать имя и пароль, которые затем передаются на удаленный сайт различными способами в зависимости от используемого протокола аутентификации.

    Вы можете либо вставить пользователя и пароль в URL-адрес, либо указать их отдельно:

     curl http://user:[email protected]/
     

    или

     curl -u пользователь: пароль http://example.org/
     

    Обратите внимание, что этот тип аутентификации HTTP не является тем, что обычно делается и запрашивается веб-сайтами, ориентированными на пользователя, в наши дни. Вместо этого они, как правило, используют формы и файлы cookie.

    Часть пути

    Часть пути просто отправляется на сервер, чтобы запросить отправку обратно соответствующего ответа. Путь — это то, что находится справа от косой черты, следующей за именем хоста и, возможно, номером порта.

    GET

    Самый простой и наиболее распространенный запрос/операция, выполняемая с использованием HTTP, — это ПОЛУЧИТЬ URL-адрес. Сам URL-адрес может относиться к веб-странице, изображению или файлу. Клиент отправляет запрос GET на сервер и получает запрошенный документ. Если ввести в командной строке

     curl https://curl. se
     

    вы получаете веб-страницу, возвращенную в окно терминала. Весь HTML-документ, который содержит этот URL-адрес.

    Все ответы HTTP содержат набор заголовков ответов, которые обычно скрыты, используйте curl --включите опцию ( -i ), чтобы отобразить их, а также остальную часть документа.

    HEAD

    Вы можете запросить у удаленного сервера ТОЛЬКО заголовки, используя параметр --head ( -I ), который заставит curl выдать запрос HEAD. В некоторых особых случаях серверы отвергают метод HEAD, в то время как другие все еще работают, что вызывает особое раздражение.

    Метод HEAD определен и сделан таким образом, что сервер возвращает заголовки точно так же, как и для GET, но без тела. Это означает, что вы можете увидеть Content-Length: в заголовках ответа, но в ответе HEAD не должно быть фактического тела.

    Одна командная строка curl может включать один или несколько URL-адресов. Наиболее распространенным случаем, вероятно, является использование одного, но вы можете указать любое количество URL-адресов. Да любой. Без ограничений. Затем вы будете получать запросы, повторяющиеся снова и снова для всех заданных URL-адресов.

    Пример, отправьте два запроса GET:

     curl http://url1.example.com http://url2.example.com
     

    Если вы используете --data для POST на URL-адрес, использование нескольких URL-адресов означает, что вы отправляете один и тот же POST на все указанные URL-адреса.

    Пример, отправьте два сообщения POST:

     curl --data name=curl http://url1.example.com http://url2.example.com
     

    Иногда вам нужно работать с несколькими URL-адресами в одной командной строке и использовать разные методы HTTP для каждого. Для этого вам понравится опция --next . По сути, это разделитель, который отделяет несколько вариантов от следующего. Все URL до --next получит тот же метод и объединит все данные POST в один.

    Когда curl достигает --next в командной строке, он как бы сбрасывает метод и данные POST и разрешает новый набор.

    Возможно, это лучше всего показать на нескольких примерах. Чтобы отправить сначала HEAD, а затем GET:

     curl -I http://example.com --next http://example.com
     

    Чтобы сначала отправить POST, а затем GET:

     curl -d score=10 http://example.com/post.cgi --next http://example.com/results.html
     

    Объяснение форм

    Формы — это общий способ, которым веб-сайт может представить HTML-страницу с полями, в которые пользователь может ввести данные, а затем нажать какую-либо кнопку «ОК» или «Отправить», чтобы эти данные были отправлены на сервер. . Затем сервер обычно использует отправленные данные, чтобы решить, как действовать. Например, использование введенных слов для поиска в базе данных или добавление информации в систему отслеживания ошибок, отображение введенного адреса на карте или использование информации в качестве подсказки для входа в систему, подтверждающей, что пользователю разрешено видеть, о чем идет речь. увидеть.

    Конечно, на стороне сервера должна быть какая-то программа для приема отправляемых вами данных. Вы не можете просто изобрести что-то из воздуха.

    GET

    GET-форма использует метод GET, как указано в HTML, например:

     

    В вашем любимом браузере эта форма появится с текстовым полем для заполнения и кнопкой "ОК". Если вы заполните '1905' и нажмите кнопку OK, после чего ваш браузер создаст новый URL-адрес для вас. URL-адрес получит junk.cgi?birthyear=1905&press=OK , добавленный к части пути предыдущего URL-адреса.

    Если исходная форма была видна на странице www.example.com/when/birth.html , вторая страница, которую вы получите, станет www.example.com/when/junk.cgi?birthyear=1905&press= ОК .

    Так работает большинство поисковых систем.

    Чтобы заставить curl сделать сообщение формы GET для вас, просто введите ожидаемый созданный URL:

     curl "http://www. example.com/when/junk.cgi?birthyear=1905&press=OK"
     

    POST

    Метод GET отображает все имена полей ввода в поле URL вашего браузера. Как правило, это хорошо, когда вы хотите добавить эту страницу в закладки с вашими данными, но это явный недостаток, если вы ввели секретную информацию в одно из полей или если имеется большое количество полей, создающих длинный и нечитаемый URL.

    Затем протокол HTTP предлагает метод POST. Таким образом, клиент отправляет данные отдельно от URL-адреса, и поэтому вы не увидите их в поле URL-адреса.

    Форма будет похожа на предыдущую:

     

    И чтобы использовать curl для публикации этой формы с теми же данными, что и раньше, мы могли бы сделать это так:

     curl --data "birthyear=1905&press=%20OK%20" http://www .example.com/when/junk.cgi
     

    Этот тип POST будет использовать Content-Type application/x-www-form-urlencoded и является наиболее широко используемым типом POST.

    Данные, которые вы отправляете на сервер, ДОЛЖНЫ уже быть правильно закодированы, curl не сделает этого за вас. Например, если вы хотите, чтобы данные содержали пробел, вам нужно заменить этот пробел на %20 и т. д. Невыполнение этого требования, скорее всего, приведет к тому, что ваши данные будут получены неправильно и испорчены.

    Последние версии curl могут на самом деле кодировать данные POST для вас, например:

     curl --data-urlencode "name=I am Daniel" http://www.example.com
     

    Если вы повторите --data несколько раз в командной строке, curl объединит все заданные фрагменты данных и поместит символы и между каждым сегментом данных.

    Загрузка файла POST

    Еще в конце 1995 года был определен дополнительный способ отправки данных через HTTP. Это задокументировано в RFC 1867, поэтому этот метод иногда называют RFC1867-posting.

    Этот метод в основном предназначен для лучшей поддержки загрузки файлов. Форма, позволяющая пользователю загрузить файл, может быть написана в HTML следующим образом:

     
    <тип ввода=имя файла=загрузить>

    Это ясно показывает, что Content-Type, который должен быть отправлен, имеет значение multipart/form-data .

    Чтобы опубликовать сообщение в подобной форме с помощью curl, введите команду, например:

     curl --form upload=@localfilename --form press=OK [URL]
     

    Скрытые поля

    Распространенным способом передачи информации о состоянии между страницами для приложений на основе HTML является добавление скрытых полей в формы. Скрытые поля уже заполнены, они не отображаются пользователю и передаются так же, как и все остальные поля.

    Аналогичный пример формы с одним видимым полем, одним скрытым полем и одной кнопкой отправки может выглядеть так:

     
    cgi">

    Чтобы отправить это с помощью curl, вам не придется думать о том, скрыты поля или нет. Для завивки они все одинаковые:

     curl --data "год рождения=1905&press=OK&person=daniel" [URL]
     

    Выясните, как выглядит POST

    Когда вы собираетесь заполнить форму и отправить ее на сервер с помощью curl вместо браузера, вы, конечно же, заинтересованы в отправке POST точно так же, как это делает ваш браузер.

    Простой способ увидеть это — сохранить HTML-страницу с формой на локальном диске, изменить «метод» на GET и нажать кнопку отправки (вы также можете изменить URL-адрес действия, если хотите к).

    Затем вы ясно увидите, что данные добавляются к URL-адресу, разделенному символом ? -письмо, как и положено GET-формам.

    PUT

    Возможно, лучший способ загрузить данные на HTTP-сервер — использовать PUT. Опять же, для этого, конечно, требуется, чтобы кто-то поместил на сервер программу или скрипт, который знает, как получать HTTP-поток PUT.

    Поместите файл на HTTP-сервер с помощью curl:

     curl --upload-file uploadfile http://www.example.com/receive.cgi
     

    Базовая аутентификация

    HTTP-аутентификация — это возможность сообщить серверу ваше имя пользователя и пароль, чтобы он мог проверить, разрешено ли вам выполнять выполняемый вами запрос. Обычная аутентификация, используемая в HTTP (это тип, который curl использует по умолчанию), основана на открытом тексте , что означает, что он отправляет имя пользователя и пароль, слегка запутанные, но все еще полностью читаемые любым, кто прослушивает сеть между вами и удаленным сервер.

    Чтобы указать curl использовать пользователя и пароль для аутентификации:

     curl --имя пользователя:пароль http://www.example.com
     

    Другая аутентификация

    Для сайта может потребоваться другой метод аутентификации (проверьте заголовки, возвращаемые сервером), а затем --ntlm , --digest , --negotiate или даже --anyauth могут быть варианты, которые подходят вам.

    Аутентификация прокси-сервера

    Иногда доступ к HTTP возможен только при использовании прокси-сервера HTTP. Это, кажется, особенно распространено в различных компаниях. Прокси-серверу HTTP может потребоваться собственный пользователь и пароль, чтобы позволить клиенту получить доступ к Интернету. Чтобы указать те, у которых есть curl, запустите что-то вроде:

     curl --proxy-user proxyuser:proxypassword curl.se
     

    Если ваш прокси-сервер требует аутентификации с использованием метода NTLM, используйте --proxy-ntlm , если для этого требуется дайджест, используйте --proxy-digest .

    Если вы используете любую из этих опций пользователя и пароля, но пропускаете часть пароля, curl запросит пароль в интерактивном режиме.

    Скрытие учетных данных

    Обратите внимание, что при запуске программы ее параметры могут быть видны в списке запущенных процессов системы. Таким образом, другие пользователи смогут просматривать ваши пароли, если вы передадите их как простые параметры командной строки. Есть способы обойти это.

    Стоит отметить, что, несмотря на то, как работает HTTP-аутентификация, многие веб-сайты не будут использовать эту концепцию, когда они предоставляют логины и т. д. Дополнительные сведения об этом см. в главе Веб-вход ниже.

    Referer

    HTTP-запрос может включать поле «referer» (да, оно написано с ошибкой), которое можно использовать, чтобы определить, с какого URL-адреса клиент перешел к этому конкретному ресурсу. Некоторые программы/скрипты проверяют поле реферера запросов, чтобы убедиться, что они не приходят с внешнего сайта или неизвестной страницы. Хотя это глупый способ проверить что-то, что так легко подделать, многие скрипты все еще делают это. Используя curl, вы можете поместить все, что хотите, в поле referer и, таким образом, легче обмануть сервер, заставив его обслужить ваш запрос.

    Используйте curl для установки поля реферера с помощью:

     curl --referer http://www.example.com http://www.example.com
     

    Агент пользователя

    Подобно полю реферера, все HTTP-запросы могут устанавливать поле Агент пользователя. Он указывает, какой пользовательский агент (клиент) используется. Многие приложения используют эту информацию, чтобы решить, как отображать страницы. Глупые веб-программисты пытаются создать разные страницы для пользователей разных браузеров, чтобы они выглядели как можно лучше для их конкретных браузеров. Обычно они также используют различные виды JavaScript и т. д.

    Время от времени вы увидите, что получение страницы с помощью curl не вернет ту же страницу, которую вы видите при получении страницы с помощью вашего браузера. Тогда вы знаете, что пришло время установить поле User Agent, чтобы обмануть сервер, заставив его думать, что вы один из этих браузеров.

    Чтобы curl выглядел как Internet Explorer 5 на компьютере с Windows 2000:

     curl --user-agent "Mozilla/4.0 (совместимый; MSIE 5.01; Windows NT 5.0)" [URL]
     

    Или почему бы не выглядеть так, будто вы используете Netscape 4.73 на старой Linux-системе:

     curl --user-agent "Mozilla/4.73 [ru] (X11; U; Linux 2. 2.15 i686)" [URL]
     

    Перенаправления

    Когда ресурс запрашивается с сервера, ответ от сервера может включать подсказку о том, куда браузер должен перейти, чтобы найти эту страницу, или новую страницу, содержащую вновь сгенерированный вывод. Заголовок, сообщающий браузеру о перенаправлении, — Location: .

    Curl не следует за заголовками Location: по умолчанию, но просто отображает такие страницы так же, как отображает все ответы HTTP. Однако у него есть опция, которая заставит его попытаться следовать Расположение: указателей.

    Чтобы указать curl следовать по местоположению:

     curl --location http://www.example.com
     

    Если вы используете curl для POST на сайт, который немедленно перенаправляет вас на другую страницу, вы можете безопасно использовать --location ( -L ) и --data / --form вместе. Curl будет использовать POST только в первом запросе, а затем вернется к GET в следующих операциях.

    Другие перенаправления

    Браузеры обычно поддерживают по крайней мере два других способа перенаправления, которых не поддерживает curl: во-первых, html может содержать мета-тег обновления, который просит браузер загрузить определенный URL-адрес через заданное количество секунд, или он может использовать JavaScript для этого.

    Основы работы с файлами cookie

    Веб-браузеры осуществляют «управление состоянием на стороне клиента» с помощью файлов cookie. Файлы cookie — это просто имена с соответствующим содержимым. Файлы cookie отправляются клиенту сервером. Сервер сообщает клиенту, для какого пути и имени хоста он хочет, чтобы файл cookie был отправлен обратно, а также отправляет дату истечения срока действия и еще несколько свойств.

    Когда клиент связывается с сервером с именем и путем, ранее указанными в полученном файле cookie, клиент отправляет файлы cookie и их содержимое обратно на сервер, если, конечно, срок их действия не истек.

    Многие приложения и серверы используют этот метод для соединения серии запросов в один логический сеанс. Чтобы иметь возможность использовать curl в таких случаях, мы должны иметь возможность записывать и отправлять файлы cookie так, как их ожидает веб-приложение. Так же, как браузеры работают с ними.

    Параметры cookie

    Самый простой способ отправить несколько файлов cookie на сервер при получении страницы с curl — добавить их в командную строку, например:

     curl --cookie "name=Daniel" http://www. пример.com
     

    Файлы cookie отправляются как обычные заголовки HTTP. Это практично, поскольку позволяет curl записывать файлы cookie, просто записывая заголовки. Запишите файлы cookie с помощью curl, используя параметр --dump-header ( -D ), например:

     curl --dump-header headers_and_cookies http://www.example.com
     

    (Обратите внимание, что описанная ниже опция --cookie-jar является лучшим способом хранения файлов cookie.)

    Curl имеет встроенный полнофункциональный механизм анализа файлов cookie, который можно использовать, если вы хотите повторно подключиться к сервера и использовать файлы cookie, которые были сохранены из предыдущего подключения (или созданы вручную, чтобы обмануть сервер, заставив его поверить, что у вас было предыдущее подключение). Чтобы использовать ранее сохраненные файлы cookie, вы запускаете curl, например:

     curl --cookie store_cookies_in_file http://www.example.com
     

    "Cookie Engine" Curl включается при использовании параметра --cookie . Если вы хотите, чтобы curl понимал только полученные файлы cookie, используйте --cookie с несуществующим файлом. Например, если вы хотите, чтобы curl понимал файлы cookie со страницы и следовал по местоположению (и, таким образом, возможно, отправлял полученные файлы cookie), вы можете вызвать его следующим образом:

     curl --cookie nada --location http://www. пример.com
     

    Curl может читать и записывать файлы cookie, которые используют тот же формат файлов, который когда-то использовали Netscape и Mozilla. Это удобный способ обмена файлами cookie между сценариями или вызовами. Переключатель --cookie ( -b ) автоматически определяет, является ли данный файл таким файлом cookie, и анализирует его, а с помощью параметра --cookie-jar ( -c ) вы делаете curl записать новый файл cookie в конце операции:

     curl --cookie cookies. txt --cookie-jar newcookies.txt http://www.example.com
     

    HTTPS защищен HTTP

    Существует несколько способов безопасной передачи HTTP. На сегодняшний день наиболее распространенным протоколом для этого является то, что обычно известно как HTTPS, HTTP через SSL. SSL шифрует все данные, отправляемые и получаемые по сети, что затрудняет шпионаж конфиденциальной информации для злоумышленников.

    SSL (или TLS, как называется текущая версия стандарта) предлагает набор расширенных функций для безопасной передачи по протоколу HTTP.

    Curl поддерживает зашифрованные выборки, если он создан для использования библиотеки TLS, и его можно настроить для использования одной из довольно большого набора библиотек — curl -V покажет, для какого из них был создан ваш curl (если есть!). Чтобы получить страницу с HTTPS-сервера, просто запустите curl, например:

     curl https://secure.example.com
     

    Сертификаты

    В мире HTTPS вы используете сертификаты для подтверждения того, что вы являетесь тем, за кого себя выдаете, в дополнение к обычным паролям. Curl поддерживает клиентские сертификаты. Все сертификаты заблокированы парольной фразой, которую необходимо ввести, прежде чем curl сможет использовать сертификат. Парольную фразу можно указать в командной строке или, если нет, ввести интерактивно, когда curl запрашивает ее. Используйте сертификат с завитком на HTTPS-сервере, например:

     curl --cert mycert.pem https://secure.example.com
     

    curl также пытается проверить, является ли сервер тем, за кого себя выдает, путем проверки сертификата сервера по локально хранящемуся пакету сертификатов ЦС. Неудачная проверка приведет к тому, что curl откажет в соединении. Затем вы должны использовать --insecure ( -k ), если вы хотите указать curl игнорировать тот факт, что сервер не может быть проверен.

    Подробнее о проверке сертификата сервера и пакетах сертификатов ca можно прочитать в SSLCERTS документ.

    Иногда вы можете получить собственное хранилище сертификатов ЦС, и тогда вы можете указать curl использовать его для проверки сертификата сервера:

     curl --cacert ca-bundle. pem https://example.com/
     

    Делая необычные вещи, вам может понадобиться добавить или изменить элементы одного запроса curl.

    Например, вы можете изменить метод POST на PROPFIND и отправить данные как Content-Type: text/xml (вместо стандартного Content-Type ) например:

     curl --data "" --header "Content-Type: text/xml" --request PROPFIND example.com
     

    Вы можете удалить заголовок по умолчанию, предоставив его без содержимого. Например, вы можете испортить запрос, отрезав заголовок Host: :

     curl --header "Host:" http://www.example.com
     

    Таким же образом можно добавить заголовки. Вашему серверу может понадобиться заголовок Destination: , и вы можете добавить его:

     curl --header "Destination: http://nowhere" http://example.com
     

    Подробнее об измененных методах

    Следует отметить, что curl самостоятельно выбирает, какие методы использовать, в зависимости от запрашиваемого действия. -d будет выполнять POST, -I будет выполнять HEAD и так далее. Если вы используете опцию --request / -X , вы можете изменить выбор ключевого слова метода curl, но вы не измените поведение curl. Это означает, что если вы, например, используете -d "данные" для выполнения POST, вы можете изменить метод на PROPFIND с -X и curl все равно будет думать, что отправляет POST . Вы можете изменить обычный метод GET на метод POST, просто добавив -X POST в командную строку, например:

     curl -X POST http://example.org/
     

    ... но curl по-прежнему будет думать и действовать так, как если бы он отправил GET, поэтому он не будет отправлять тело запроса и т. д.

    Некоторые приемы входа в систему Итак, вот краткое изложение того, как работает подавляющее большинство всех форм входа и как войти в них с помощью curl.

    Можно также отметить, что для того, чтобы сделать это должным образом в автоматическом режиме, вам, безусловно, потребуется создавать сценарии и выполнять несколько вызовов curl и т. д.

    Во-первых, серверы в основном используют файлы cookie для отслеживания состояния входа клиента в систему. , поэтому вам нужно будет перехватывать файлы cookie, которые вы получаете в ответах. Кроме того, многие сайты также устанавливают специальный файл cookie на странице входа (чтобы убедиться, что вы попали туда через их страницу входа), поэтому вы должны иметь привычку сначала получать страницу формы входа для захвата установленных там файлов cookie.

    Некоторые веб-системы входа в систему содержат различное количество JavaScript, и иногда они используют такой код для установки или изменения содержимого файлов cookie. Возможно, они делают это, чтобы предотвратить запрограммированный вход в систему, как это руководство описывает, как... В любом случае, если чтения кода недостаточно, чтобы позволить вам повторить поведение вручную, захват HTTP-запросов, выполняемых вашими браузерами, и анализ отправленных файлов cookie обычно рабочий метод, чтобы решить, как сократить потребность в JavaScript.

    Фактически

    тег для входа в систему, многие сайты заполняют случайные/сессионные или иным образом тайно сгенерированные скрытые теги, и вам может потребоваться сначала захватить HTML-код для формы входа и извлечь все скрытые поля, чтобы иметь возможность делать правильный логин POST. Помните, что содержимое должно быть закодировано в URL-адресе при отправке обычным POST.

    Некоторые приемы отладки

    Много раз, когда вы запускаете curl на сайте, вы замечаете, что сайт не отвечает на ваши запросы curl так же, как на запросы вашего браузера.

    Затем вам нужно начать делать ваши запросы curl более похожими на запросы вашего браузера:

    • Используйте параметр --trace-ascii для хранения полных подробных журналов запросов для облегчения анализа и лучшего понимания

    • Убедитесь, что вы проверяете и используете файлы cookie, когда это необходимо (как для чтения с помощью --cookie , так и для записи с помощью --cookie-jar )

    • Установить пользовательский агент (с -A ) на единицу, как это делает недавний популярный браузер

    • Установить реферер (с -E ), как это установлено в браузере

    • Если вы используете POST, убедитесь, что вы отправляете все поля и в том же порядке, что и браузер.