Проверка кода ответа сервера и http заголовков
Содержание:
- Netrc
- HTTP-клиент на Python
- Persistent Connections
- chown
- LDAP
- Часто используемые функции CURL и константы
- Как пользоваться curl?
- Основы
- Примеры кода
- Some debug tricks
- Config File
- Uploading
- Что такое код ответа сервера?
- Cookies
- POST (HTTP)
- Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds
- Подготовка помещения
Netrc
Unix introduced the concept a long time ago. It is a way for a user
to specify name and password for commonly visited FTP sites in a file so that
you don’t have to type them in each time you visit those sites. You realize
this is a big security risk if someone else gets hold of your passwords, so
therefore most unix programs won’t read this file unless it is only readable
by yourself (curl doesn’t care though).
Curl supports files if told to (using the / and
options). This is not restricted to just FTP, so curl can
use it for all protocols where authentication is used.
A very simple file could look something like:
HTTP-клиент на Python
В этом разделе приводится пример, подобный HTTP-клиенту на языке С, но на этот раз написанный на Python.
Python – это полезный объектно-ориентированный язык сценариев, который отлично подходит для создания прототипов и коммерческого программного обеспечения.
В примере предполагается, что вы немного знакомы с Python, но он используется очень мало, так что глубокие знания не потребуются.
Код простого HTTP-клиента, написанный на языке Python с использованием, приведен в листинге 4.
Листинг 4.
HTTP-клиент на Python с использованием интерфейса из libcurl
import sys import pycurl wr_buf = '' def write_data( buf ): global wr_buf wr_buf += buf def main(): c = pycurl.Curl() c.setopt( pycurl.URL, 'http://www.exampledomain.com' ) c.setopt( pycurl.WRITEFUNCTION, write_data ) c.perform() c.close() main() sys.stdout.write(wr_buf)
Создание прототипа на Python
Здесь иллюстрируется одно из преимуществ языка Python при создании прототипов.
Довольно широкая функциональность достигается при небольшом количестве кода.
На С можно получить более высокую производительность, но если вашей целью является быстрое создание кода для проверки идеи, лучше воспользоваться высокоуровневыми языками сценариев, такими как Python.
Этот код значительно проще, чем версия на C
Он начинается с импортирования необходимых модулей (стандартного системного модуля и модуля ).
Далее определяется буфер записи ().
Как и в программе на C, я декларирую функцию .
Обратите внимание, что эта функция принимает один аргумент:
буфер данных, считанных с сервера HTTP. Я просто взял этот буфер и добавил его к глобальному буферу записи
Функция начинает с создания указателя , затем использует для записи методы для определения и .
Она вызывает метод для запуска передачи и закрывает указатель.
Наконец, она вызывает функцию и передает буфер записи в .
Обратите внимание, что в данном случае указатель ошибки контекста не нужен, поскольку используется конкатенация строк Python, а значит, не нужно использовать строку со статически заданным размером.
Persistent Connections
Specifying multiple files on a single command line will make curl transfer all
of them, one after the other in the specified order.
libcurl will attempt to use persistent connections for the transfers so that
the second transfer to the same host can use the same connection that was
already initiated and was left open in the previous transfer. This greatly
decreases connection time for all but the first transfer and it makes a far
better use of the network.
Note that curl cannot use persistent connections for transfers that are used
in subsequence curl invokes. Try to stuff as many URLs as possible on the same
command line if they are using the same host, as that’ll make the transfers
faster. If you use an HTTP proxy for file transfers, practically all transfers
will be persistent.
chown
Команда chown (change owner) позволяет менять владельца и группу владельца:
- Файлов.
- Каталогов.
- Ссылок.
Основные опции команды chown:
- -c — детальный вывод всех выполняемых изменений;
- -f — минимум информации (убирает ошибки из выдачи);
- -h — изменять права символических ссылок, а файлы к которым они ведут не трогать;
- -R — рекурсивная обработка всех подкаталогов;
- -L — переходить по всем символическим ссылкам на директории.
Изменить владельца папки ex1 на user:
Изменить на владельца user и группу users:
Чтобы изменения применялись не только к данному каталогу, но и всем подкаталогам внутри, необходимо добавить опцию -R:
LDAP
If you have installed the OpenLDAP library, curl can take advantage of it and
offer support. On Windows, curl will use WinLDAP from Platform SDK
by default.
Default protocol version used by curl is LDAPv3. LDAPv2 will be used as
fallback mechanism in case if LDAPv3 will fail to connect.
LDAP is a complex thing and writing an LDAP query is not an easy task. I do
advise you to dig up the syntax description for that elsewhere. One such place
might be: RFC 2255, The LDAP URL
Format
If I want the same info in HTML format, I can get it by not using the
(enforce ASCII) flag.
You also can use authentication when accessing LDAP catalog:
By default, if user and password provided, OpenLDAP/WinLDAP will use basic
authentication. On Windows you can control this behavior by providing one of
, or option in curl command line
On Windows, if no user/password specified, auto-negotiation mechanism will be
used with current logon credentials (SSPI/SPNEGO).
Часто используемые функции CURL и константы
- curl_init — Инициализирует сеанс;
- curl_close — Завершает сеанс;
- curl_exec — Выполняет запрос;
- curl_errno — Возвращает код ошибки;
- curl_setopt — Устанавливает параметр для сеанса, например:
- CURLOPT_HEADER – значение 1 означает, что необходимо вернуть заголовки;
- CURLOPT_INFILESIZE — параметр для указания ожидаемого размера файла;
- CURLOPT_VERBOSE — значение 1 означает что CURL будет выводить подробные сообщения о всех производимых операциях;
- CURLOPT_NOPROGRESS – отключение индикатора прогресса операции, значение 1;
- CURLOPT_NOBODY – если Вам не нужен документ, а нужны только заголовки, то поставьте значение 1;
- CURLOPT_UPLOAD — для закачки файла на сервер;
- CURLOPT_POST – выполнить запрос методом POST;
- CURLOPT_FTPLISTONLY — получение списка файлов в директории FTP сервера, значение 1;
- CURLOPT_PUT — выполнить запрос методом PUT, значение 1;
- CURLOPT_RETURNTRANSFER — возвратить результат, не выводя в браузер, значение 1;
- CURLOPT_TIMEOUT – максимальное время выполнения в секундах;
- CURLOPT_URL – указание адреса для обращения;
- CURLOPT_USERPWD — строка с именем пользователя и паролем в виде :;
- CURLOPT_POSTFIELDS – данные для POST запроса;
- CURLOPT_REFERER — задает значение HTTP заголовка «Referer: »;
- CURLOPT_USERAGENT — задает значение HTTP заголовка «User-Agent: »;
- CURLOPT_COOKIE — содержимое заголовка «Cookie: », который будет отправлен с HTTP запросом;
- CURLOPT_SSLCERT- имя файла с сертификатом в формате PEM;
- CURLOPT_SSL_VERIFYPEER – значение 0, для того чтобы запретить проверку сертификата удаленного сервера (по умолчанию 1);
- CURLOPT_SSLCERTPASSWD — пароль к файлу сертификата.
- curl_getinfo — Возвращает информацию об операции, вторым параметром может выступать константа для указания, что именно нужно показать, например:
- CURLINFO_EFFECTIVE_URL — последний использованный URL;
- CURLINFO_HTTP_CODE — последний полученный код HTTP;
- CURLINFO_FILETIME — дата модификации загруженного документа;
- CURLINFO_TOTAL_TIME — время выполнения операции в секундах;
- CURLINFO_NAMELOOKUP_TIME — время разрешения имени сервера в секундах;
- CURLINFO_CONNECT_TIME — время, затраченное на установку соединения, в секундах;
- CURLINFO_PRETRANSFER_TIME — время, прошедшее от начала операции до готовности к фактической передаче данных, в секундах;
- CURLINFO_STARTTRANSFER_TIME — время, прошедшее от начала операции до момента передачи первого байта данных, в секундах;
- CURLINFO_REDIRECT_TIME — время, затраченное на перенаправление, в секундах;
- CURLINFO_SIZE_UPLOAD — количество байт при закачке;
- CURLINFO_SIZE_DOWNLOAD — количество байт при загрузке;
- CURLINFO_SPEED_DOWNLOAD — средняя скорость закачки;
- CURLINFO_SPEED_UPLOAD — средняя скорость загрузки;
- CURLINFO_HEADER_SIZE — суммарный размер всех полученных заголовков;
- CURLINFO_REQUEST_SIZE — суммарный размер всех отправленных запросов;
- CURLINFO_SSL_VERIFYRESULT — результат проверки SSL сертификата, запрошенной с помощью установки параметра CURLOPT_SSL_VERIFYPEER;
- CURLINFO_CONTENT_LENGTH_DOWNLOAD — размер загруженного документа, прочитанный из заголовка Content-Length;
- CURLINFO_CONTENT_LENGTH_UPLOAD — размер закачиваемых данных;
- CURLINFO_CONTENT_TYPE — содержимое полученного заголовка Content-type, или NULL в случае, когда этот заголовок не был получен.
Подробнее о функциях CURL и константах к ним можете посмотреть на официальном сайте PHP — php.net
На этом все, для начинающих я думаю достаточно Удачи!
Как пользоваться curl?
Мы рассмотрели все, что касается теории работы с утилитой curl, теперь пришло время перейти к практике, и рассмотреть примеры команды curl.
Загрузка файлов
Самая частая задача — это загрузка файлов linux. Скачать файл очень просто. Для этого достаточно передать утилите в параметрах имя файла или html страницы:
Но тут вас ждет одна неожиданность, все содержимое файла будет отправлено на стандартный вывод. Чтобы записать его в какой-либо файл используйте:
А если вы хотите, чтобы полученный файл назывался так же, как и файл на сервере, используйте опцию -O:
Если загрузка была неожиданно прервана, вы можете ее возобновить:
Если нужно, одной командой можно скачать несколько файлов:
Еще одна вещь, которая может быть полезной администратору — это загрузка файла, только если он был изменен:
Данная команда скачает файл, только если он был изменен после 21 декабря 2017.
Ограничение скорости
Вы можете ограничить скорость загрузки до необходимого предела, чтобы не перегружать сеть с помощью опции -Y:
Здесь нужно указать количество килобайт в секунду, которые можно загружать. Также вы можете разорвать соединение если скорости недостаточно, для этого используйте опцию -Y:
Передача файлов
Загрузка файлов, это достаточно просто, но утилита позволяет выполнять и другие действия, например, отправку файлов на ftp сервер. Для этого существует опция -T:
Или проверим отправку файла по HTTP, для этого существует специальный сервис:
В ответе утилита сообщит где вы можете найти загруженный файл.
Отправка данных POST
Вы можете отправлять не только файлы, но и любые данные методом POST. Напомню, что этот метод используется для отправки данных различных форм. Для отправки такого запроса используйте опцию -d. Для тестирования будем пользоваться тем же сервисом:
Если вас не устраивает такой вариант отправки, вы можете сделать вид, что отправили форму. Для этого есть опция -F:
Здесь мы передаем формой поле password, с типом обычный текст, точно так же вы можете передать несколько параметров.
Передача и прием куки
Куки или Cookie используются сайтами для хранения некой информации на стороне пользователя. Это может быть необходимо, например, для аутентификации. Вы можете принимать и передавать Cookie с помощью curl. Чтобы сохранить полученные Cookie в файл используйте опцию -c:
Затем можно отправить cookie curl обратно:
Передача и анализ заголовков
Не всегда нам обязательно нужно содержимое страницы. Иногда могут быть интересны только заголовки. Чтобы вывести только их есть опция -I:
А опция -H позволяет отправить нужный заголовок или несколько на сервер, например, можно передать заголовок If-Modified-Since чтобы страница возвращалась только если она была изменена:
Аутентификация curl
Если на сервере требуется аутентификация одного из распространенных типов, например, HTTP Basic или FTP, то curl очень просто может справиться с такой задачей. Для указания данных аутентификации просто укажите их через двоеточие в опции -u:
Точно так же будет выполняться аутентификация на серверах HTTP.
Использование прокси
Если вам нужно использовать прокси сервер для загрузки файлов, то это тоже очень просто. Достаточно задать адрес прокси сервера в опции -x:
Основы
Перед тем, как отправить cURL запрос — нам следует создать сеанс. Сделать это можно при помощи функции Данная функция принимает один параметр — url, который будет загружен. Но url можно будет установить позже, по этому данный параметр не обязателен.
$curl = curl_init();
Настройки
Параметры cURL нужны для того, чтобы более точно сконфигурировать Ваш запрос. С помощью параметров можно получить те самые, почти безграничные, возможности работы с запросами.
После того, как ресурс создан, можно приступить к настройке параметров запроса. Для этого мы можем пользоваться функцией , которая принимает три обязательных параметра:
- $ch — ссылка на ресурс cURL
- Параметр, который мы устанавливаем
- Значение параметра
Ниже приведен список часто используемых параметров, а их полный список можно просмотреть в документации php.
Параметр | Описание |
CURLOPT_RETURNTRANSFER | Возвращает ответ как строку (если передать true), вместо вывода на экран |
CURLOPT_CONNECTTIMEOUT | Позволяет задать количество секунд для ожидания соединения. |
CURLOPT_TIMEOUT | Задает количество секунд, которые будет выполняться запрос. |
CURLOPT_USERAGENT | Содержимое заголовка «User-Agent: «, посылаемого в HTTP-запросе. |
CURLOPT_URL | URL, куда будет отправлен запрос. |
CURLOPT_POST | true, если нужно отправить POST запрос |
CURLOPT_POSTFIELDS | Массив параметров для POST запроса |
Как задавать параметры
Как описывалось выше, параметры можно задавать при помощи метода . Давайте разберем несколько примеров:
Пример 1: Установим значение URL, куда будет отправлен запрос:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://testcURL.com');
К слову, установить этот параметр можно в одну строку при инициализации ресурса:
$curl = curl_init('http://testcURL.com');
Пример 2: Установим время выполнения запроса в 10 секунд:
$curl = curl_init(); curl_setopt($curl, CURLOPT_TIMEOUT, 10);
Альтернативный способ задавать настройки
Настройки можно задать при помощи функции , первый параметр которой — ссылка на ресурс cURL, второй — ассоциативный массив, где ключами выступают константы параметров.
$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://testcURL.com' ));
Отправка запроса cURL
Как написано выше, при помощи cURL можно отправлять различные запросы. В данной статье мы рассмотрим варианты отправки GET и POST запросов.
Отправить GET запрос
GET запрос используется по умолчанию. Как вы увидите в примере ниже, он достаточно прост для понимания.
Если есть необходимость использовать параметры, их можно просто перечислить в url:
Отправим простой GET запрос с параметрами:
// Инициализация ресурса curl $curl = curl_init(); // Параметры отправки запроса (мы добавили useragent) curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://testsite.com/?param=value¶m2=value2', CURLOPT_USERAGENT => 'ctrlv cURL Request' )); // Отправка запроса; ответ будет в $response $response = curl_exec($curl); // Завершение работы с cURL curl_close($curl);
Отправка POST запроса
Синтаксис для GET и POST запросов немного отличается. В случае, если запрос не содержит параметров, разница будет только в параметре CURLOPT_POST (в POST этот параметр устанавливаем в true или 1). Если необходимо передавать параметры POST запроса, дополнительно указываем параметр CURLOPT_POSTFIELDS (массив, где название параметра — ключ массив).
В данном примере отправляется тот-же запрос, который рассматривался в выше, отличается лишь метод отправки.
// Инициализация ресурса curl $curl = curl_init(); // Параметры отправки запроса (мы добавили useragent) curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'http://testsite.com', CURLOPT_USERAGENT => 'ctrlv cURL Request', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => array( param => 'value', param22 => 'value2' ) )); // Отправка запроса; ответ будет в $response $response = curl_exec($curl); // Завершение работы с cURL curl_close($curl);
Примеры кода
Форматирование и разметка страницы
Как и в HTML, в Curl можно проектировать графику и текст с разметкой непосредственно в исходном коде:
{curl 8.0 applet} {set-document-properties margin=0.5in, background="beige", border-width=5pt, border-color="blue" } {title font-family="Times New Roman Bold Italic", font-size=24pt, color="green", Fruit} {center {image source={url "images/logo.gif"}}} {paragraph {bold font-style="italic", Definition}: Many fruits!! } {heading font-size=14pt, color="black", Types of Fruits} || Second level heading {heading level = 2, {Frame width=100pt, height=30pt, background="yellow"} {EllipseGraphic width=30pt, height=40pt, fill-color="orange"} }
В начале программы был объявлен специальный оператор , где — отступ слева, — фон документа (вместо файла с изображением как параметр может использоваться и цвет фона), — ширина обрамления документа, — цвет обрамления документа.
Далее использовались операторы и , которые были описаны ранее а так же и , первый из которых создает отдельную область, а второй рисует эллипс.
Результат работы примера:
Объектно–ориентированное программирование
Curl позволяет работать в объектно-ориентированной среде:
{curl 8.0 applet} {define-class public Foo {method public {hello}:void {popup-message "Hi!"} } } {define-class public Bar {inherits Foo} {method public {hello}:void {popup-message "Hello World!!"} } } {do let fooFoo = {Foo} {foo.hello} let barFoo = {Bar} {bar.hello} }
В начале программы был объявлен класс и его наследник класс с переопределенным методом .
После чего были созданы по одному экземпляру этих классов и у обоих вызван этот метод.
Результат работы примера:
Событийное программирование
В Curl есть возможность обрабатывать различные события, например нажатие на кнопку:
{curl 8.0 applet} {CommandButton label = "Push me!", {on Action do {popup-message "Noooo!!" } } }
Была объявлена кнопка с надписью «Push me!» и обработчик нажатия внутри которого описывалось всплывающее окно с надписью «Noooo!!».
Результат работы примера:
Some debug tricks
Many times when you run curl on a site, you’ll notice that the site doesn’t
seem to respond the same way to your curl requests as it does to your
browser’s.
Then you need to start making your curl requests more similar to your
browser’s requests:
-
Use the option to store fully detailed logs of the requests
for easier analyzing and better understanding -
Make sure you check for and use cookies when needed (both reading with
and writing with ) -
Set user-agent (with ) to
one like a recent popular browser does -
Set referer (with ) like
it is set by the browser -
If you use POST, make sure you send all the fields and in the same order as
the browser does it.
Config File
Curl automatically tries to read the file (or file on
Microsoft Windows systems) from the user’s home dir on startup.
The config file could be made up with normal command line switches, but you
can also specify the long options without the dashes to make it more
readable. You can separate the options and the parameter with spaces, or with
or . Comments can be used within the file. If the first letter on a
line is a -symbol the rest of the line is treated as a comment.
If you want the parameter to contain spaces, you must enclose the entire
parameter within double quotes (). Within those quotes, you specify a quote
as .
NOTE: You must specify options and their arguments on the same line.
Example, set default time out and proxy in a config file:
Whitespaces ARE significant at the end of lines, but all whitespace leading
up to the first characters of each line are ignored.
Prevent curl from reading the default file by using -q as the first command
line parameter, like:
Force curl to get and display a local help page in case it is invoked without
URL by making a config file similar to:
You can specify another config file to be read by using the /
flag. If you set config file name to it’ll read the config from stdin,
which can be handy if you want to hide options from being visible in process
tables etc:
Uploading
FTP / FTPS / SFTP / SCP
Upload all data on stdin to a specified server:
Upload data from a specified file, login with user and password:
Upload a local file to the remote site, and use the local file name at the
remote site too:
Upload a local file to get appended to the remote file:
Curl also supports ftp upload through a proxy, but only if the proxy is
configured to allow that kind of tunneling. If it does, you can run curl in a
fashion similar to:
HTTP
Upload all data on stdin to a specified HTTP site:
Note that the HTTP server must have been configured to accept PUT before this
can be done successfully.
For other ways to do HTTP data upload, see the POST section below.
Что такое код ответа сервера?
Для нормальной работы различных программ, работающих по протоколу HTTP сервер возвращает не только текст страницы, но и трехзначный код, который позволяет определить результат запроса. С помощью этого кода можно не только описать какая ошибка возникла во время обработки, но и перенаправить пользователя на другую страницу, или же сказать, что страница не была изменена. Вот самые распространенные коды ответа сервера:
1xx — информационные:
- 100 — сервер принял первую часть запроса, можно подрожать передачу;
- 101 — нужно изменить протокол работы на более подходящий;
- 102 — на обработку запроса уйдет много времени, используется чтобы браузер не разрывал соединение раньше времени;
2хх — операция успешна:
- 200 — запрос выполнен успешно, отправляется для большинства запрашиваемых страниц;
- 201 — после выполнения запроса был создан ресурс;
- 202 — запрос принят, но еще не обработан;
- 203 — запрос выполнен успешно, но информация для ответа взята из прокси;
- 204 — запрос обработан, но контента для отображения нет;
- 205 — попросить пользователя ввести необходимые данные;
- 206 — запрос обработан, но передана только часть контента;
3xx — перенаправления:
- 300 — есть несколько страниц для этого запроса, например, на нескольких языках;
- 301 — страница навсегда перемещена по новому адресу;
- 302 — документ был временно перемещен;
- 303 — документ необходимо загрузить по указанному адресу с помощью протокола GET;
- 304 — документ не изменился с последнего запроса;
- 305 — нужно использовать прокси;
- 307 — ресурс временно перемещен на новый адрес.
4хх — ошибка в запросе:
- 400 — неверный запрос;
- 401 — необходимо аутентифицироваться;
- 403 — запрос принят, но у вас нет доступа;
- 404 — страница не найдена на сервере;
- 405 — используемый метод нельзя применять на сервере;
- 408 — время ожидания передачи запроса истекло;
- 410 — ресурс полностью удален;
- 411 — нужно указать длину запроса;
- 413 — запрос слишком длинный;
- 414 — URI запроса слишком длинная.
5хх — ошибка сервера:
- 500 — внутренняя ошибка сервера;
- 501 — нужная функция не поддерживается;
- 502 — прокси не может соединиться со шлюзом;
- 503 — сервер не может обрабатывать запросы по техническим причинам;
- 504 — прокси не дождался ответа от сервера;
- 505 — версия протокола HTTP не поддерживается.
Cookies
С помощью cookies веб-браузеры контролируют состояние на стороне
клиента. Cookie — это имя с присоединенным содержимым. Сервер при
помощи отправки cookies сообщает клиенту путь и имя хоста, по
которому в следующий раз должны быть отправлены cookies, сообщает
время жизни cookies и некоторые другие параметры.
Когда клиент соединяется с сервером по адресу, указанному в
принятом cookie, клиент посылает этот cookie к серверу (если время
жизни не истекло).
Многие приложения и сервера используют этот метод, чтобы
объединить нескольких запросов в одну логическую сессию. Чтобы curl
также мог выполнять такую функцию, мы должны уметь сохранять и
отправлять cookies, как и делают браузеры.
Простейший способ отправить cookie к серверу при получении
страницы с помощью curl, это добавить соответствующий ключ в
командной строке:
# curl -b "name=Daniel" www.cookiesite.com
Cookies отправляются как обычные HTTP-заголовки. Это позволяет curl
сохранять cookies, сохраняя заголовки. Сохранение cookies с помощью
curl выполняется командой:
# curl -D headers_and_cookies www.cookiesite.com
(кстати, для сохранения cookies лучше использовать ключ -c, об этом
ниже).
У curl имеется полнофункциональный обработчик cookies, который
полезен, когда вы хотите соединиться в очередной раз к серверу и
использовать cookies, сохраненные в прошлый раз (либо подработанные
вручную). Для использования cookies, сохраненных в файле, вызовите
curl так:
# curl -b stored_cookies_in_file www.cookiesite.com
«Cookie-движок» curl включается, когда вы указываете ключ
-b. Если вы хотите, чтобы curl лишь воспринимал cookies, используйте
-b с указанием файла, которого не существует. Например, если вы
хотите, чтобы curl принял cookies со страницы, а затем пошел по
перенаправлению (возможно, отдав принятый только что cookie), то
можно вызывать curl так:
# curl -b nada -L www.cookiesite.com
Curl умеет читать и писать cookie-файлы, имеющие формат Netscape и
Mozilla. Это удобный способ обмениваться cookies между браузерами и
автоматическими скриптами. Ключ -b автоматически определяет, является
ли данный файл cookie-файлом указанных браузеров и обрабатывает его
соответствующим образом, а используя ключ -c/—cookie-jar, вы можете
заставить curl записать новый cookie-файл по завершении операции:
# curl -b cookies.txt -c newcookies.txt www.cookiesite.com
POST (HTTP)
It’s easy to post data using curl. This is done using the option.
The post data must be urlencoded.
Post a simple «name» and «phone» guestbook.
How to post a form with curl, lesson #1:
Dig out all the tags in the form that you want to fill in.
If there’s a «normal» post, you use to post. takes a full «post
string», which is in the format
The ‘variable’ names are the names set with in the tags,
and the data is the contents you want to fill in for the inputs. The data
must be properly URL encoded. That means you replace space with + and that
you replace weird letters with %XX where XX is the hexadecimal representation
of the letter’s ASCII code.
Example:
(page located at )
We want to enter user ‘foobar’ with password ‘12345’.
To post to this, you enter a curl command line like:
While uses the application/x-www-form-urlencoded mime-type, generally
understood by CGI’s and similar, curl also supports the more capable
multipart/form-data type. This latter type supports things like file upload.
accepts parameters like . If you want the contents to
be read from a file, use as contents. When specifying a file, you
can also specify the file content type by appending to the
file name. You can also post the contents of several files in one field. For
example, the field name ‘coolfiles’ is used to send three files, with
different content types using the following syntax:
If the content-type is not specified, curl will try to guess from the file
extension (it only knows a few), or use the previously specified type (from an
earlier file if several files are specified in a list) or else it will use the
default type ‘application/octet-stream’.
Emulate a fill-in form with . Let’s say you fill in three fields in a
form. One field is a file name which to post, one field is your name and one
field is a file description. We want to post the file we have written named
«cooltext.txt». To let curl do the posting of this data instead of your
favourite browser, you have to read the HTML source of the form page and find
the names of the input fields. In our example, the input field names are
‘file’, ‘yourname’ and ‘filedescription’.
To send two files in one post you can do it in two ways:
Send multiple files in a single «field» with a single field name:
Send two fields with two field names
To send a field value literally without interpreting a leading or , or
an embedded , use instead of . This is recommended
when the value is obtained from a user or some other unpredictable
source. Under these circumstances, using instead of could
allow a user to trick curl into uploading a file.
Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds
In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is
necessary to make definition of preprocessor symbol visible to
libcurl and curl compilation processes. To set this definition you have the
following alternatives:
- Modify and
- Modify
- Modify the «Preprocessor Definitions» in the libcurl project
Note: The pre-processor settings can be found using the Visual Studio IDE
under «Project -> Settings -> C/C++ -> General» in VC6 and «Project ->
Properties -> Configuration Properties -> C/C++ -> Preprocessor» in later
versions.
Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, in
order to use it with your program it is mandatory that your program includes
lwIP header file (or another lwIP header that includes this)
before including any libcurl header. Your program does not need the
preprocessor definition which is for libcurl internals only.
This BSD-style lwIP TCP/IP stack support must be considered experimental given
that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl
might yet need some additional adjustment, caveat emptor.
Подготовка помещения
Пожалуй, никто не возьмёт на себя смелость утверждать, что новая мебель хорошо смотрится со старыми обоями. Поэтому, перед тем как спроектировать кухню, необходимо определить, какой ремонт будет произведён, какие материалы при этом будут использованы и какие изменения внесены.
Предполагаемый ремонт можно условно разделить на несколько позиций:
- пол;
- потолок;
- стены (в т. ч. фартук);
- проводка;
- вентиляция и канализация.
Покрытие из плитки и керамогранита холодное и жёсткое, посуда, упавшая на такой пол, разобьётся сразу. Линолеум дешевле, теплее, мягче, однако он не отличается особой долговечностью, к тому же выцветает под действием солнечных лучей. Материалы, используемые при отделке потолка, ничем не отличаются от материалов, применяемых в других комнатах. Используют гипсокартон, краску, натяжные полотна, некоторые до сих пор белят по старинке.
Стены на кухне пачкаются гораздо чаще, чем в других комнатах, ведь брызги жира во время приготовления, всевозможные капли и подтёки постоянно появляются на их поверхности. Поэтому многие отдают предпочтение влагостойким материалам, которые легко очищаются: моющимся обоям, пластиковым панелям, керамической плитке. Между верхними и нижними рядами шкафов гарнитура, в местах максимального загрязнения, обычно прокладывают фартук. Его можно сделать из стекла, из керамической плитки или даже составить из мозаики.
Чтобы оценить, какой из проектов будет смотреться выигрышнее всего, можно создать несколько вариантов оформления помещения в картинках или объёмных 3D моделях. Сразу же на рисунке необходимо отметить места расположения розеток, канализационных труб и вытяжки.