Введение в curl и его установка

Получение и отправка заголовков

По умолчанию, заголовки ответа сервера не показываются. Но это можно исправить:

> curl -i google.com
HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=utf-8
Date: Sun, 16 Sep 2018 08:28:18 GMT
Expires: Tue, 16 Oct 2018 08:28:18 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

Если содержимое страницы не нужно, а интересны только заголовки (будет отправлен запрос):

> curl -I http://www.example.com/
HTTP/1.1 200 OK
Date: Sun, 16 Sep 2018 08:20:52 GMT
Server: Apache/2.4.34 (Win64) mod_fcgid/2.3.9
X-Powered-By: PHP/7.1.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: PHPSESSID=svn7eb593i8d2gv471rs94og58; path=/
Set-Cookie: visitor=fa867bd917ad0d715830a6a88c816033; expires=Mon, 16-Sep-2019 08:20:53 GMT; Max-Age=31536000; path=/
Set-Cookie: lastvisit=1537086053; path=/
Content-Length: 132217
Content-Type: text/html; charset=utf-8

Посмотреть, какие заголовки отправляет CURL при запросе, можно с помощью опции , которая выводит более подробную информацию:

> curl -v google.com
  • Строка, начинающаяся с означает заголовок, отправленный серверу
  • Строка, начинающаяся с означает заголовок, полученный от сервера
  • Строка, начинающаяся с означает дополнительные данные от CURL
* Rebuilt URL to: http://google.com/
*   Trying 173.194.32.206...
* TCP_NODELAY set
* Connected to google.com (173.194.32.206) port 80 (#0)
> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=utf-8
< Date: Mon, 17 Sep 2018 15:11:49 GMT
< Expires: Wed, 17 Oct 2018 15:11:49 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
* Connection #0 to host google.com left intact

Если этой информации недостаточно, можно использовать опции или .

А вот так можно отправить свой заголовок:

> curl -H "User-Agent: Mozilla/5.0" http://www.example.com/

Следовать за редиректами

Сервер Google сообщил нам, что страница перемещена (301 Moved Permanently), и теперь надо запрашивать страницу . С помощью опции укажем CURL следовать редиректам:

> curl -L google.com
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="ru">
<head>
<meta content="Поиск информации в интернете: веб страницы, картинки, видео и многое другое." name="description">
<meta content="noodp" name="robots">
<meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image">
<meta content="origin" name="referrer">
<title>Google</title>
..........

Работа по протоколу FTP

Скачать файл с FTP-сервера:

> curl -u username:password -O ftp://example.com/file.zip

Если заданный FTP путь является директорией, то по умолчанию будет выведен список файлов в ней:

> curl -u username:password -O ftp://example.com/public_html/

Выгрузить файл на FTP-сервер

> curl -u username:password -T file.zip ftp://example.com/

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

> curl -u username:password -T - ftp://example.com/data.txt

Дополнительно:

  • Утилита curl. Обмен данными с сервером
  • Пользуемся curl для отладки HTTP

Поиск:
CLI • CURL • Cookie • FTP • GET • HTTP • Linux • POST • URL • Web-разработка • Windows • Форма

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

Команда ниже отправляет POST запрос на сервер аналогично тому, как пользователь, заполнив HTML форму, нажал бы кнопку «Отправить». Данные будут отправлены в формате .

> curl -d "key1=value1&key2=value2" http://www.example.com
> curl --data "key1=value1&key2=value2" http://www.example.com

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

> curl --data-urlencode "name=Василий" --data-urlencode "surname=Пупкин" http://www.example.com

Если значение опции начинается с , то после него должно быть имя файла с данными (или дефис — тогда будут использованы данные из стандартного ввода). Пример получения данных из файла для отправки POST-запроса:

> curl --data @data.txt http://www.example.com

Содержимое файла :

key1=value1&key2=value2

Массив , который будет содержать данные этого запроса:

Array
(
     => value1
     => value2
)

Пример URL-кодирования данных из файла перед отправкой POST-запроса:

> curl --data-urlencode name@username.txt http://www.example.com

Содержимое файла :

Иванов Иван Иванович

Массив , который будет содержать данные этого запроса:

Array
(
     = Иванов Иван Иванович
)

Список основных команд wget

  • -V (—version) — выводит версию программы
  • -h (—help) — выводит справку
  • -b (—background) — работать в фоновом режиме
  • -o {file} (—out-file) — указывает лог файл
  • -d (—debug) — включает режим отладки
  • -v (—verbose) — выводит максимум информации о работе утилиты
  • -q (—quiet) — выводит минимум информации о работе
  • -i {file} (—input-file) — читает URL из файла
  • —force-html — читает файл указанный в предыдущем параметре как html
  • -t (—tries) — количество попыток подключения к серверу
  • -O {file} (—output-document) — файл в который будут сохранены полученные данные
  • -с (—continue) — продолжает ранее прерванную загрузку
  • -S (—server-response) — выводит ответ сервера
  • —spider — проверяет работоспособность URL
  • -T {time} (—timeout) — таймаут подключения к серверу
  • —limit-rate — ограничивает скорость загрузки
  • -w (—wait) — интервал между запросами
  • -Q (—quota) — максимальный размер загрузки
  • -4 (—inet4only) — использовать протокол ipv4
  • -6 (—inet6only) — использовать протокол ipv6
  • -U (—user-agent) — строка USER AGENT отправляемая серверу
  • -r (—recursive) — рекурсивная работа утилиты
  • -l (—level) — глубина при рекурсивном сканировании
  • -k (—convert-links) — конвертирует ссылки в локальные при загрузке страниц
  • -P (—directory-prefix) — каталог, в который будут загружаться файлы
  • -m (—mirror) — скачивает сайт на локальную машину
  • -p (—page-requisites) — во время загрузки сайта скачивает все необходимые ресурсы

Примеры команд wget

Как скачать файл и сохранить с другим названием

Параметр устанавливает имя выходного файла. Если файл называется , и вы хотите сохранить его непосредственно в , вы должны использовать такую команду:

Как установить скорость загрузки

Вы можете установить скорость загрузки при скачивании большого файла, чтобы он не использовал всю доступную пропускную способность. Скорость загрузки определяется в килобайтах (k) и мегабайтах (m). Используйте команду:

Как продолжить загрузку после прерывания

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

Как скачать несколько файлов

  • Сначала создайте и откройте файл с именем MultipleDownloads.txt (или другим именем по вашему выбору) с помощью текстового редактора.:
  • В редакторе добавьте URL-адреса, которые вы хотите загрузить, по одному в каждой строке.
  • Сохраните и выйдите из файла.
  • Выполните следующую команду wget в окне терминала:

Как загрузить зеркало веб-страницы

С помощью wget вы можете загрузить весь веб-сайт из Интернета, используя параметр . Он предлагает wget создать зеркало указанной веб-страницы. Основная команда для этого:

Как увеличить число попыток повтора

По умолчанию количество повторных попыток установлено на 20.

Вы также можете установить число на бесконечность со значениями 0 или inf, как в следующем примере:

Как пропустить проверку сертификата

По умолчанию wget проверяет, есть ли у сервера действительный сертификат SSL / TLS. Если он не идентифицирует подлинный сертификат, он отказывается от загрузки.

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

Как изменить User Agent

При загрузке веб-страницы wget по сути эмулирует браузер. В некоторых случаях в выводе может быть указано, что у вас нет разрешения на доступ к серверу или что соединение запрещено. Это может быть связано с тем, что веб-сайт блокирует клиентские браузеры с определенным «User-Agent».

«User-Agent» — это поле заголовка, которое браузер отправляет на сервер, к которому он хочет получить доступ. Поэтому для загрузки с сервера, который отказывается подключаться, попробуйте его изменить.

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

Загрузка файлов методом POST

Для HTTP запроса типа POST существует два варианта передачи полей из HTML форм, а именно, используя алгоритм и . Алгоритм первого типа создавался давным-давно, когда в языке HTML еще не предусматривали возможность передачи файлов через HTML формы.

Со временем возникла необходимость через формы отсылать еще и файлы. Тогда консорциум W3C взялся за доработку формата POST запроса, в результате чего появился документ RFC 1867. Форма, которая позволяет пользователю загрузить файл, используя алгоритм , выглядит примерно так:

<form action="/upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="upload">
    <input type="submit" name="submit" value="OK">
</form>

Чтобы отправить на сервер данные такой формы:

> curl -F upload=@image.jpg -F submit=OK http://www.example.com/upload.php

Скрипт , который принимает данные формы:

<?php
print_r($_POST);
print_r($_FILES);
move_uploaded_file($_FILES'upload''tmp_name', 'image.jpg');

Ответ сервера:

Array
(
     => OK
)
Array
(
     => Array
        (
             => image.jpg
             => image/jpeg
             => D:\work\temp\phpB02F.tmp
             => 0
             => 2897
        )
)

Получение и отправка cookie

Cookie используются сайтами для хранения некой информации на стороне пользователя. Сервер сохраняет cookie на стороне клиента (т.е. в браузере), отправляя заголовки:

Set-Cookie: PHPSESSID=svn7eb593i8d2gv471rs94og58; path=/
Set-Cookie: visitor=fa867bd917ad0d715830a6a88c816033; expires=Mon, 16-Sep-2019 08:20:53 GMT; Max-Age=31536000; path=/
Set-Cookie: lastvisit=1537086053; path=/

А браузер, в свою очередь, отправляет полученные cookie обратно на сервер при каждом запросе. Разумеется, тоже в заголовках:

Cookie: PHPSESSID=svn7eb593i8d2gv471rs94og58; visitor=fa867bd917ad0d715830a6a88c816033; lastvisit=1537086053

Передать cookie на сервер, как будто они были ранее получены от сервера:

> curl -b lastvisit=1537086053 http://www.example.com/

Чтобы сохранить полученные сookie в файл:

> curl -c cookie.txt http://www.example.com/

Затем можно отправить сохраненные в файле cookie обратно:

> curl -b cookie.txt http://www.example.com/catalog/

Файл имеет вид:

# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

www.example.com    FALSE    /    FALSE    0             lastvisit        1537085301
www.example.com    FALSE    /    FALSE    1568621304    visitor          60f7c17ba4b5d77975dfd020f06ac8ca
www.example.com    FALSE    /    FALSE    0             PHPSESSID        p23cr2d14rlgj5kls58kd7l6a6

Сохранить вывод в файл

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

  • ( нижнего регистра) — результат будет сохранён в файле, заданном в командной строке;
  • ( верхнего регистра) — имя файла будет взято из URL и будет использовано для сохранения полученных данных.

Сохраняем страницу Google в файл :

> curl -L -o google.html google.com
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   219  100   219    0     0   2329      0 --:--:-- --:--:-- --:--:--  2329
100 14206    0 14206    0     0  69980      0 --:--:-- --:--:-- --:--:-- 69980

Сохраняем документ в файл :

> curl -O http://www.gnu.org/software/gettext/manual/gettext.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1375k  100 1375k    0     0   800k      0  0:00:01  0:00:01 --:--:--  800k
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: