Curl команди. HTTP автентифікація cURL у командному рядку. Перевірка можливості підключення до URL-адреси

curl (1)
  • >> curl (1) (тБЪОЩЕ man: лПНБОДЩ Й РТЙЛМБДОЩЕ РТПЗТБННЩ РПМШЪПЧБФЕМШУЛПЗП ХТПЧОС)
  • лМАЮ curlПВОБТХЦЕО Ч ВБ'Є ЛМУЮЧІ УМПЧ.
  • NAME

    curl - transfer a URL

    Synopsis

    curl

    DESCRIPTION

    curlЦе інструмент для передачі даних з або до сервера, використовуючи один з підтримуваних протоколів (HTTP, HTTPS, FTP, FTPS, TFTP, DICT, TELNET, LDAP або FILE). Command is designed to work without user interaction.

    curl offers busload of useful tricks як proxy support, user authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file transfer resume and more. As you will see below, the amount of features will make your head spin!

    curl is powered by libcurl for all transfer-related features. See (3) for details.

    URL

    URL syntax є protocol dependent. You"ll find a detailed description в RFC 3986.

    Ви можете скористатися різними URL-адресами або частинами URL-адреси, щоб записати частину електронної пошти з braces as in:

    or you can get sequences of alphanumeric series using as in:

    Нічого не з'являти згоди є підтриманий на момент, але ви можете використовувати декілька next до всіх інших:

    Ви можете визначити будь-яку URL-адресу на лінію. Вони будуть бути виконані в послідовному manner в спеціальному порядку.

    Since curl 7.15.1 Ви можете або конкретний крок counter для ranges, якщо ви можете отримати все Nth number or letter:

    Якщо ви знайдете конкретну URL-адресу без протоколу // prefix, curl буде вірити, що ви думаєте, що протокол ви маєте велике бажання. Це буде вказати на HTTP, але намагаються інші протоколи, що базуються на встановлених-застосованих host name prefixes. Для прикладу, для host names starting with "ftp." curl will assume you want to speak FTP.

    PROGRESS METER

    curl normally displays a progress meter під час operations, indicating amount transfered data, transfer speeds and estimated time left etc.

    However, sin curl displays data to the terminal by default, if you invoke curl до operation and it is about to write data to the terminal, it disables progress meter astherwise it would mess up the output mixing progress meter and response data.

    Якщо ви намагаєтеся запустити метр для HTTP POST або PUT requests, вам потрібна відповідь, щоб відобразити відповідь на файл, використовуючи shell redirect (>), -o або подібний.

    Це не трапляється, щоб FTP завантажити як те, що функціонування не буде спустити над будь-якою відповіддю на terminal.

    Якщо ви впевнені в прогресі "bar" встановлюйте регулярний метр, -# is your friend.

    OPTIONS

    -a/--append (FTP) Якщо він використовувався в FTP upload, це буде тлі curl до підрахунку до target file instead of overwriting it. Якщо це файл не існує, він буде створений.

    Якщо ця опція використовується twice, вдруге буде заблоковано append mode again. -A/--user-agent (HTTP) Відповідь User-Agent string to send to the HTTP server. Деякий погано прийде CGIs fail if його не встановлювати "Mozilla/4.0". Натисніть на позначення бланки в string, наближається до string with single quote marks. This can also be set with the -H/--header option of course.

    Якщо цей варіант є більше, ніж один раз, останній один буде бути одним, що використовується. This is done by first doing a request and checking the response-headers, thus inducing an extra network round-trip. --basic, --digest, --ntlm, and --negotiate.

    Зверніть увагу на те, що будь-який спосіб не залежати від того, як ви збираєтеся з stdin, тому що це може бути необхідний для того, щоб бути двадцять і для клієнта повинні бути заздалегідь. Якщо потрібна вага буде, коли uploading from stdin, upload operation will fail.

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. -b/--cookie (HTTP) Відображення файлу для HTTP-сервера як cookie. Це означає, що дані спочатку отримані з сервера в "Set-Cookie:" line. Data data повинна бути в форматі "NAME1=VALUE1; NAME2=VALUE2".

    Якщо немає "=" літер, він використовувався в мережу, вона використовується як файл ім'я, щоб використовувати read previously stored cookie lines from, which should be used in this session if they match. За допомогою цього методу також activates "cookie parser", які будуть робити curl record incoming cookies too, які можуть бути handy if you"re using this in combination with the -L/--location option. Файл формату файлу до read cookie з повинен бути плагін HTTP headers або Netscape/Mozilla cookie файл формату.

    NOTE that the file specified with -b/--cookie is only used as input. No cookies буде stored in the file. Store cookies, use the -c/--cookie-jar option or you could even save the HTTP headers to a file using -D/--dump-header!

    Якщо цей варіант є більше, ніж один раз, то останній буде бути одним, який використовувався. that ends with ";type=A".

    Якщо ця опція використовується twice, вдруге буде заблоковано ASCII usage. --basic (HTTP) Tells curl to use HTTP Basic authentication. Це означає, що ця функція використовується, як правило, неточна, неможлива, щоб використовувати її для попереднього набору параметрів, які мають різну authentication method (such as --ntlm, --digest and --negotiate).

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. --ciphers (SSL) Специфіки, які циферки використовують у зв'язку. List of ciphers must be using valid ciphers. Read up on SSL cipher list details on this URL: http://www.openssl.org/docs/apps/ciphers.html

    Якщо ця функція використовує кілька разів, в останній день будезавжди інші. --compressed (HTTP) Використовується для відключеного відповіді за допомогою одного з логотипів libcurl supports, і повернення до uncompressed document. Якщо ця функція використовується і сервери, які не підтримуються, curl буде повідомити про помилку.

    Якщо ця функція використовується впродовж декількох днів, всі випадки буде запускати його на/вниз. --connect-timeout Maximum time in seconds що ви можете підключитися до сервера до таке. Це тільки обмеження підключення фази, тільки curl має з'єднаний цей варіант не може використовуватися. See also the -m/--max-time option.

    Якщо ця option is used several times, the last one will be used. -c/--cookie-jar Specify для якого файлу ви хочете записати всі файли cookie після завершення роботи. Curl writes all cookies previously read from specified file as well as all cookies received from remote server(s). Якщо ви не знаєте cookies, то файл не буде написаний. File will be written using the Netscape файл cookie формату. Якщо ви найдете файл ім'я файлу для значка dash, "-", файли cookie повинні бути отримані до stdout.

    NOTEЯкщо cookie jar може бути створений або написаний, у всьому curl operation буде невпинним або навіть report an error clearly. За допомогою -v буде варіювати відтворений, але що є тільки visible feedback ви збираєтеся про це ймовірно lethal situation.

    Якщо ця опція використовується в короткий час, останній конкретний файл name буде використовуватися. -C/--continue-at Continue/Resume a previous файл transfer at given offset. Given offset є висока кількість номерів, які будуть переміщені Counter з початку файлового файлу до нього перетворюється на destination. Якщо ви використовуєте, ftp server command SIZE не буде використано curl.

    Використовуйте "-C -" для того, щоб перевірити, щоб автоматично виконати where/how to resume the transfer. Це будуть використовувати given output/input files до фігури that out.

    Якщо ця option is used several times, the last one will be used. --create-dirs Якщо ви використовувалися в з'єднанні з -o опціями, curl буде створювати необхідність локальної директорії hierarchy як необхідно. Ця опція створить dirs mentioned with -o option, nothing else. Якщо -o file name не буде повідомлено, або якщо мова йде про mentions або існують, то не буде створюватися.

    Для створення remote directories при використанні FTP, try --ftp-create-dirs. --crlf (FTP) Перевірити LF на CRLF в upload. Useful for MVS (OS/390).

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. -d/--data (HTTP) Показує конкретні дані в POST-рефекті на HTTP-сервері, в спосіб, що може emulate, якщо ваш користувач має зв'язок в HTML-формі і натиснуто на кнопку. Зауважте, що ці дані є винятково виразними з необов'язковим процесом (з усіма новими лінійками вирізати). The data is expected to be "url-encoded". Це буде викликати дзвінок до програвання даних до сервера, використовуючи content-type application/x-www-form-urlencoded. Compare to -F/--form. Якщо ця функція використовує більше, ніж один раз на тому, як один рядок, ці сторінки конкретні будуть merged together with separating &-letter. Thus, using "-d name=daniel -d skill=lousy" буде generate a post chunk that looks like "name=daniel&skill=lousy".

    Якщо ви натиснете data з листом @, залиште, щоб файл name був read the data from, or - if you want curl to read the data from stdin. Показники файлу повинні бутизавантажені. Multiple files може бути specified. Posting data from a file named "foobar" would thus be done with --data@foobar".

    To post data purely binary, ви повинні instead use the --data-binary option.

    -d/--data is the same as --data-ascii.

    Якщо ця функція використовує кілька разів, ця мова продовжується в першу чергу. --data-ascii (HTTP) This is an alias for the -d/--data option.

    Якщо ця функція використовує кілька разів, ця мова продовжується в першу чергу. --data-binary (HTTP) --data-ascii does, алеякщо за допомогою цього параметра в контексті конфіденційної інформації є kept as-is. If you want to post a binary файл без strip-newlines feature of the --data-ascii option, this is for you.

    Якщо ця функція використовує кілька разів, ця мова продовжується в першу чергу. --digest (HTTP) Enables HTTP Digest authentication. Це є вірогідність того, що помилки password from being sent over wire in clear text. Use this in combination with the normal -u/--user option to set user name and password. See also --ntlm, --negotiate and --anyauth for related options.

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. --disable-eprt (FTP) Tell curl до disable the use of the EPRT and LPRT commands when doing active FTP transfers. Curl буде звичайно завжди перша спроба використовувати EPRT, тоді LPRT перед використанням PORT, але з цим варіантом, це буде використовувати PORT праворуч. EPRT і LPRT є розширення до оригіналу FTP протоколу, не можуть працювати на всіх серверах, але можуть бути більш функціональними в будь-який спосіб, ніж традиційний PORT command.

    Якщо ця функція використовує кілька разів, всі випадки буде скинути це на/поза. --disable-epsv (FTP) Tell curl to disable the use of the EPSV command when doing passive FTP transfers. Curl буде, як правило, першим, щоб скористатися використанням EPSV перед PASV, але з цією функцією, вона не намагається використовувати EPSV.

    Якщо ця функція використовує кілька разів, всі випадки буде скинути це на/поза. -D/--dump-header Введіть протокол headers до спеціального файлу.

    Ця опція є зручним для використання, коли ви збираєтеся headers, що на HTTP site sends to you. Cookies from the headers could then be read in a second curl invoke by using the -b/--cookie option! The -c/--cookie-jar option is however a better way to store cookies.

    Якщо використовується на FTP, ftp server response lines are consideraed being "headers" і thus are saved there.

    Якщо ця option is used several times, the last one will be used. -e/--referer (HTTP) Натисніть на "Referer Page" інформацію на HTTP-сервері. This can also be set with the -H/--header flag of course. When used with -L/--locationВи можете підтвердити "; auto" до --реферера URL, щоб зробити curl автоматично налаштовувати попередній URL, коли він follows a Location: header. The "; auto" string може бути використаний один, навіть якщо ви не можете вийти на початковий --реферер.

    Якщо ця option is used several times, the last one will be used. --engine Виберіть OpenSSL crypto engine to use for cipher operations. Use --engine listдо print a list of build-time supported engines. Зверніть увагу на те, що не всі (або невідомі) елементи можуть бути застосовані в ході часу. --environment (RISC OS ONLY) Sets a range of environment variables, using the names the -w option supports, до easier allow extraction of useful information after having run curl.

    Якщо ця функція використовує кілька разів, всі випадки буде скинути це на/поза. --egd-file (HTTPS) Відомості про назву файлу до Entropy Gathering Daemon socket. Зображення використовується для керування символом для SSL connections. See also the --random-file option. -E/--cert (HTTPS) Використовуйте заголовок для використання спеціального Certificate file, коли ви отримуєте файл з HTTPS. Certificate must be in PEM format. Якщо опційний password isn"t specified, it will be queried for on the terminal. Note that this certificate is the private key and the private certificate concatenated!

    Якщо ця option is used several times, the last one will be used. --cert-type (SSL) Tells curl what certificate type the provided certificate is in. PEM, DER і ENG є відомими типами.

    Якщо ця option is used several times, the last one will be used. --cacert (HTTPS) Tells curl для використання спеціального certificate file до verify the peer. Файл може бути знайдений в декількох CA certificates. Certificate(s) must be в PEM форматі.

    curl recognizes the environment variable назви "CURL_CA_BUNDLE" if це те, що є, і використовує given path as path to a CA cert bundle. Ця опція overrides that variable.

    Windows version curl буде автоматично дивитися на CA certs file, що називається "curl-ca-bundle.crt", або в тому ж повідомленні як curl.exe, або в поточному робочому об'єкті, або в будь-який час протягом всього вашого PATH.

    Якщо ця option is used several times, the last one will be used. --capath (HTTPS) Tells curl to use the specified certificate directory to verify the peer. Показники повинні бути в форматі PEM, і directory повинні бути процесовані з використанням c_rehash utility, зроблених з openssl. Using --capath can allow curl to make https connections більше efficiently than using --cacert if the --cacert file contains many CA certificates.

    Якщо ця option is used several times, the last one will be used. -f/--fail (HTTP) Проблема невідповідно (не відтворюється на всіх) на серверах errors. Це найбільше усвідомлює це, щоб отримати потрібні scripts, etc. У звичайних випадках, коли HTTP-сервери позначаються на вкладці документа, його відновлюють HTML документ, який міститься (який міститься також описані де і більше). Цю flag буде запобігти curl від outputting that and return error 22.

    Якщо ця опція використовується twice, вдруге буде позбавлятись безглуздої невдачі. --ftp-account (FTP) When an FTP server asks for "account data" після user name і password буде been provided, this data is sent off using the ACCT command. (Added in 7.13.0)

    Якщо ця опція використовується twice, другий буде заздалегідь використати. --ftp-create-dirs (FTP) Якщо у FTP URL/operation використовується шлях, що не існує поточно на сервері, стандартний рух curl is to fail. .

    Якщо ця опція використовується twice, вдруге буде запобігти розробці directory створення. --ftp-method (FTP) Перевірка того, що метод curl повинен використовуватися для отримання файлу на FTP(S) server. Метод argument може бути одним з наступних альтернатив: multicwd curl does a single CWD operation for each path part in the given URL. Для глибоких hierarchies this means very many commands. Це is how RFC1738 says it should be done. Це є default but the slowest behavior. nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR і т.д. server for all these commands. Це є чудовий behavior. Singlecwd curl does один CWD з повним target directory і функціонують на файлі "normally" (відповідно в multicwd case). Це єщось більше стандартів, що складають, що "nocwd", але без повної penalty "multicwd". --ftp-pasv (FTP) За допомогою PASV при перехіді. PASV є внутрішньою деталізацією behavior, але за допомогою цієї опції може бути використана для попередньої --ftp-port option. (Added in 7.11.0)

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються.

    Ftp-alternative-to-user (FTP) Якщо authenticating with USER and PASS commands fails, send this command. Коли під'єднує мережевий зв'язок з Secure Transport server через FTPS за допомогою клієнтського certificate, за допомогою "SITE AUTH" буде tell the server to retrieve the username from the certificate. (Added in 7.15.5) --ftp-skip-pasv-ip ( FTP) Tell curl не використовує IP-адресу сервера повідомлень в його відповіді на curl"s PASV command when curl connects the data connection. Instead curl буде повторно використовувати саму IP-адресу, яку він використовує для контролю доступу. (Added in 7.14.2)

    Ця опція не впливає на те, що PORT, EPRT або EPSV використовується використовуваний PASV.

    Якщо ця опція використовується twice, вдруге буде використовувати сервер "s suggested address. t support SSL/TLS. (Added in 7.11.0)

    Якщо ця option is used twice, the second will again disable this. --ftp-ssl-reqd (FTP) Require SSL/TLS для підключення до FTP. Terminates the connection if the server doesn"t support SSL/TLS. (Added in 7.15.5)

    Якщо ця option is used twice, the second will again disable this. -F/--form (HTTP) Цього року curl emulate filled in form in which a user has pressed the submit button. Це свідчить про те, що POST буде використовуватися в Content-Type multipart/form-data в залежності від RFC1867. Це enables uploading of binary files etc. Для того, щоб "content" part to be a file, prefix the file name with an @ sign. Для того, щоб отримати content part from a file, prefix the file name with the letter<. The difference between @ and < is then that @ makes a file get attached in the post as a file upload, while the < makes a text field and just get the contents for that text field from a file.

    Наприклад, для того, щоб прослухати свій файл файлу до сервера, де "password" є name of the form-field для того, щоб /etc/passwd will be the input:

    Для читання файлу "з вмістом від stdin включено файл, використовуйте - де файл файлу повинен бути". Це goes for both @ and< constructs.

    Ви можете також скористатися те, що Content-Type використовуватиметься "type=", в manner similar to:

    curl-F " [email protected];type=text/html" url.com

    curl-F "name=daniel;type=text/foo" url.com

    Ви можете також explicitly change name field of file upload part by setting filename=, як це:

    curl-F "file=@localfile;filename=nameinpost" url.com

    Натисніть на кілька examples and details в MANUAL.

    Це може бути використане багато разів. --form-string (HTTP) Similar to --form except, що значення string для наміченого параметра є використаним literally. Leading "@" and "<" characters, and the ";type=" string in the value have no special meaning. Use this in preference to --formякщо є" будь-яка можливість, що string значення може accidentally trigger "@" або "<" features of --form. -g/--globoff Цей параметр перемикається від "URL globbing parser". Якщо ви збираєтеся цієї опції, ви можете встановити URL-адреси, які містять листи () без того, щоб вони були interpreted за curl itself. Зауважте, що ці листи не є звичайними правильними URL-адресами, але вони повинні бути підписані на основі URI standard. -G/--get When used, this option will make all data specified with -d/--data or --data-binary to be used в HTTP GET request instead of the POST request, що іншеwise would be used. The data will be appended to the URL with a "?" separator.

    Якщо він встановлюється в комбінації з -I, POST data буде введено, щоб бути прийнятим до URL з HEAD request.

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. -h/--help Usage help. -H/--header

    (HTTP) Extra header use using when getting a web page. You may specify any number of extra headers. Зверніть увагу, що якщо ви повинні призначити custom header, що ви маєте саму назву як один з національних ones curl буде використовувати, вашу externaly set header буде використовуватися внутрішнє одне. Цей дозволить вам зробити тільки трішки stuff, що curl would normally do. Ви не повинні переміщувати міжнародні набори headers без знання добре добре, що ви "re doing. Replaceing internal header with one without content on the right side of the colon will prevent that header from appearing.

    curl will make sure that each header you add/replace get sent with proper end of line marker, you should thus not add that as apart of the header content: do not add newlines або carriage returns they will only mess things up for you.

    See also the -A/--user-agent and -e/--referer options.

    Ця опція може бути використана кілька разів до add/replace/remove multiple headers. --ignore-content-length (HTTP) Ignore the Content-Length header. Це особливе використання для серверів, що беруть участь в Apache 1.x, які будуть повідомити неправильно Контент-Length для файлів велику, ніж 2 gigabytes. -i/--include (HTTP) Включає HTTP-header в output. HTTP-header включає things як server-name, date of the document, HTTP-version and more...

    Якщо ця опція використовується twice, вдруге буде заблоковано клавіатуру. --interface Perform an operation using a specified interface. Ви можете ввести interface name, IP address or host name. An example could look like:

    Якщо ця option is used several times, the last one will be used. -I/--head (HTTP/FTP/FILE) Fetch the HTTP-header тільки! HTTP-сервери позначають клавішу HEAD ,яка ця функція використовується, але не потрібна функція документа. Якщо він використовувався на FTP або FILE файлі, curl відтворюють файл файлу і останній термін зміни тільки.

    Якщо ця option is used twice, the second will again disable header only. -j/--junk-session-cookies (HTTP) Коли curl є для read cookies з given file, ця опція буде робити це записувати всі "session cookies". Це буде basically have same effect as if a new session is started. Typical browsers always discard session cookies коли they"re closed down.

    Якщо ця функція використовує кілька разів, всі випадки буде скинути це на/поза. -k/--insecure (SSL) Цей параметр explicitly allows curl to perform "insecure" SSL connections and transfers. Всі SSL зв'язки будуть встановлені для збереження безпеки, використовуючи CA certificate bundle, налаштовану за помилкою. Це дає змогу всі зв'язки, що розглядаються як "невідповідність" до неузгодженості -k/--insecure is used.

    Якщо ця опція використовується twice, в секунду буде заборонено. --key (SSL) Private key file name. Ви можете надати свій приватний ключ в цьому окремому файлі.

    Якщо ця option is used several times, the last one will be used. --key-type (SSL) Приватний key file type. Specify which type your --keyнаданий приватний key is. DER, PEM та ENG є supported.

    Якщо ця option is used several times, the last one will be used. --krb4 (FTP) Enable kerberos4 authentication and use. Великий повинен бути введений і повинен бути одним з "clear", "safe", "confidential" або "private". Ви повинні використовувати рівень, що не один з цих, "приватний" буде встановлюватися.

    Ця опція вимагає, що library була побудована з kerberos4 support. Це не дуже спільний. Use -V/--versionщоб скористатися ним.

    Якщо ця option is used several times, the last one will be used. -K/--config Specify which config file read curl arguments from. config file is a text file in which command line arguments can be written which then will be used as if they were written on the actual command line. Options and their parameters must be specified on the same config file line. Якщо параметр є додатковим білим простором, параметр повинен бути встановлений з quotes. Якщо перша колонка config line є "#" character, останнє лінію буде treated as comment.

    Specify filename як "-" для отримання curl read the file from stdin.

    Зверніть увагу на те, що це можливо для URL в config file, ви повинні specify it using the --url option, and not simply writing the URL on its own line. So, it could look similar to this:

    Це може бути використане багато разів.

    When curl is invoked, it always (unless -q is used) checks for default config file and uses it if found. Більше config file checked for in following places in this order:

    1) curl tries to find the "home dir": Це перші перевірки для CURL_HOME і then HOME environmentálnі variables. Failing that, it uses getpwuid() on unix-like systems (яких відновлюють домашню мову, щоб дати поточного користувача в вашій системі). У Windows, це checks for APPDATA variable, or as last resort the "%USERPROFILE%Application Data".

    2) На windows, якщо немає файлу файлу _curlrc в домашній dir, його перевірки для одного в тому ж значенні executable curl is placed. On unix-like systems, it will simply try to load .curlrc від визначеного home dir. --limit-rate Specify the maximum transfer rate you want curl to use. Ця особливість є корисною, якщо ви маєте обмежений банк і ви не можете використовувати вашу трансляцію.

    Given speed is measured in bytes/second, unless a suffix is ​​appended. Використовуючи "k" або "K", буде число в кілоbytes, "m" або M", що його megabytes, коли "g" або "G", що gigabytes.Examples: 200K, 3m і 1G.

    If you are also using the -Y/--speed-limit option, що option буде приймати послідовність і мій нестерпний швидкий-лімітування легше, щоб допомогти керувати швидким обмеженням логічного працюючого.

    Якщо ця option is used several times, the last one will be used. -l/--list-only (FTP) Якщо ви натискаєте на FTP directory, це перемикання зв'язку, а також лише один вид. Особливо корисні, якщо ви хочете, щоб компоненти для вмісту FTP-директорів не виключали з використанням стандартного перегляду directory, використовуючи стандартний перегляд або формат.

    Ця опція припускає FTP NLST command to be sent. Деякі FTP-сервери містять лише файли в їх відповіді до NLST; вони не включають subdirectories and symbolic links.

    Якщо ця опція використовується twice, вдруге буде заборонено розмістити лист тільки. --local-port [-num] Набір prefered number or range of local port numbers to use for connection(s). Зверніть увагу, що рядок номерів з натурою є скидання ресурсу, що буде працювати в часах, щоб встановити цей рівень до певного способу, щоб визначити, що пов'язані з необхідним з'єднанням налаштування. (Added in 7.15.2) -L/--location (HTTP/HTTPS) Якщо на сервері reports that the requested page has moved to a different location (indicated with Location: header and 3XX response code) this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers з усіх потрібних pages will be shown. Коли authentication is used, curl тільки sends його віртуальних до ініціал host. Якщо redirect curl to a different host, it won"t be able to intercept the user+password. See also --location-trusted on how to change this. Ви можете скористатися об'ємом реdirects to follow by using the --max-redirs option.

    Якщо ця опція використовується twice, вдруге буде заборонено розміщення. --location-trusted (HTTP/HTTPS) Як -L/--location, але буде дозволити, щоб повідомити назву + password до всіх hosts, що на сайті можна redirect to. Це не може або не може бути введено в безпечний бік, якщо веб-ресурси ви знайдете на якому ви знайдете будь-яку authentication info (який є plaintext в випадку HTTP Basic authentication).

    Якщо ця опція використовується twice, вдруге буде заборонено розміщення. --max-filesize Specify maximum size (in bytes) файлу до download. Якщо файл вимагатиметься, ця величина буде більшою, transfer не буде запущений і curl буде відновлено з відповідним кодом 63.

    NOTE: File size is not always known prior to download, and for such files this option no effect even if the file transfer ends up being larger thhan this given limit. Це сполучення між FTP і HTTP transfers. -m/--max-time Maximum time in seconds що ви дозволили кожну роботу до того. Це використовується для того, щоб вирішити ваші тренувальні ходи з ходьби за години, щоб виконати низькі мережі або links going down. See also the --connect-timeout option.

    Якщо ця option is used several times, the last one will be used. -M/--manual Manual. Display the huge help text. -n/--netrc Makes curl scan the .netrc file in the user"s home directory for login name and password. This is typically used for ftp on unix. If used with http, curl will enable user authentication. (4) or (1) for details на файлі формату. Curl will not complain if that file hasn"t the right permissions (it should not be world nor group readable). Environment variable "HOME" is used to find the home directory.

    Quick and very simple example of how to setup a .netrcнатиснути на curl до ftp до машини host.domain.com з user name "myself" і password "secret" should look similar to:

    machine host.domain.com login myself password secret

    Якщо ця опція використовується twice, вдруге буде заблоковано netrc usage. --netrc-optional Very similar to --netrc, but this option makes the .netrc usage optional and not mandatory as the --netrc does. --negotiate (HTTP) Enables GSS-Negotiate authentication. GSS-Negotiate method був розроблений Microsoft і використовується в їх веб-застосунках. Це є першорядним способом як підтримка для Kerberos5 authentication but may be also used along with another authentication methods. Більше інформації IETF draft draft-brezak-spnego-http-04.txt.

    Ця опція вимагає, що library була побудована з GSSAPI support. Це не дуже спільний. Use -V/--versionВи можете скористатися GSS-Negotiate.

    Якщо Ви використовуєте цю функцію, Ви повинні також надати fake -u/--user option для активації authentication code properly. Посилання на "-u:" є добрим як user name і password від -u option aren"t використовується.

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. -N/--no-buffer Disable buffering of output stream. У звичайних робочих місцях, curl буде використовувати стандартний буфферований output stream, що буде мати ефект, що він буде output the data in chunks, не необхідно exactly when the data arrives. За допомогою цієї опції буде відхилено, що buffering.

    Якщо ця опція використовується twice, вдруге буде перемикатися на buffering. --ntlm (HTTP) Enables NTLM authentication. NTLM authentication method був designed by Microsoft і is used by IIS web servers. Він є власним протоколом, перетвореним на людину за допомогою людей і впроваджується в curl заснований на своїх ефектах. Цей вид behavior не повинен бути об'єднаний, ви повинні набрати кожну, яка використовує NTLM для перемикання на громадську і спрямовану authentication метод instead. Such as Digest.

    Якщо ви намагаєтеся надати NTLM для вашого authentication proxy, буде використовувати --proxy-ntlm.

    Ця опція вимагає, що library була побудована з SSL support. Use -V/--versionВи можете скористатися функцією NTLM.

    Якщо ця функція використовує кілька разів, наступні випадки не відрізняються. -o/--output Write output to instead of stdout. Якщо ви використовуєте () або збирають багато документів, ви можете використовувати "#" наступні за номером в specifier. Що variable will be replaced with the current string for the URL being fetched. Like in:

    Ви можете використовувати цей варіант як багато разів як ви маєте номер URL.

    See also the --create-dirs option to create the local directories динамічно. -O/--remote-name Write output до локального файлу називається remote file we get. (Тільки в файлі частина remote file використовується, cestа cut off.)

    remote file name to use for saving is extracted from the given URL, nothing else.

    Ви можете використовувати цей варіант як багато разів як ви маєте номер URL. --pass (SSL) Pass phrase for the private key

    Якщо ця option is used several times, the last one will be used. --proxy-anyauth Tells curl to pick a suitable authentication метод коли комунікація з given proxy. Це буде спричинено додатковим запитом/response round-trip. (Added in 7.13.2)

    Якщо ця опція використовується twice, вдруге буде заборонено проксі use-any authentication. --proxy-basic Tells curl для використання HTTP Basic authentication when communicating with the given proxy. Use --basic for enabling HTTP Basic with a remote host. Основним є дефектні норми методу curl використання з proxies.

    Якщо ця опція використовується twice, вдруге буде заблоковано HTTP Basic authentication. --proxy-digest Tells curl до використання HTTP Digest authentication when communicating with the given proxy. Use --digest for enabling HTTP Digest with a remote host.

    Якщо ця опція використовується twice, вдруге буде заблоковано HTTP Digest. --proxy-ntlm Tells curl use HTTP NTLM authentication when communicating with the given proxy. Use --ntlm for enabling NTLM with remote host.

    Якщо ця опція використовується twice, вдруге буде запобігти disable proxy HTTP NTLM. -p/--proxytunnel When an HTTP proxy is used ( -x/--proxy), ця опція буде викликати не-HTTP-протоколи до переходу до тюнінгу через proxy instead of merely using it to HTTP-like operations. Пристрій approach є зроблений з HTTP proxy CONNECT request and requires that proxy дозволить direct connect to remote port number curl wants to tunnel through to.

    Якщо ця опція використовується twice, вдруге буде позбавитися від неактивного proxy tunnel. -P/--ftp-port

    (FTP) Reverses the initiator/listener roles when connecting with ftp. Це перемикання керує використанням PORT Command instead of PASV. У практиці, PORT натисне на сервер для з'єднання з клієнтом", конкретні адреси та port, при якому PASV вибирає сервер для ip-адреси і port для з'єднання.
    Ви повинні бути одним з: i.e "eth0" на особливість, яке встановлює IP-адресу, яку Ви можете використовувати (Unix only) IP-адреса i.e "192.168.10.1" на specify exact IP number host name i.e "my.host.domain" to specify machine - make curl pick the same IP address that is already used for the control connection

    Якщо ця option is used several times, the last one will be used. Disable the use of PORT with --ftp-pasv. Застосовувати attempt to use the EPRT command instead of PORT by using --disable-eprt. EPRT є дійсно PORT++. -q If used as the first parameter on the command line, the curlrc config file will not be read and used. See the -K/--configдля докладних відомостей про те, що config file search path default. -Q/--quote (FTP) Виконати arbitrary command to remote FTP server. Будь-яка команда являє собою BEFORE transfer is taking place (just after the initial PWD command to be exact). Для виконання повідомлень зайняти місце після успішного transfer, prefix them with a dash "-". Для виконання повідомлень get sent after libcurl has changed working directory, just before transfer command(s), prefix command with "+". Ви маєте specify any amount of commands. Якщо сервер повертається додатком для однієї команди, вказує на те, що планування буде введено. Ви повинні мати syntactically correct FTP команди як RFC959 defines.

    Це може бути використане багато разів. --random-file (HTTPS) Відомості про назву файлу до файлу, що містить те, що буде зчитане як строк даних. Data is used to seed the random engine for SSL connections. See also the --egd-file option. -r/--range (HTTP/FTP) Використовуйте потрібний рівень (i.e a partial document) з HTTP/1.1 або FTP-сервер. Ranges може бути specified in a number of ways. 0-499 specifies the first 500 bytes 500-999 specifies the second 500 bytes -500 specifies the last 500 bytes 9500- specifies the bytes from offset 9500 and forward 0-0,-1 specifies the first and last byte only(*)(H) 500-700,600-799 specifies 300 bytes from offset 500(H) 100-199,500-599 specifies two separate 100 bytes ranges(*)(H)

    (*) = NOTE, що це буде викликати сервер до reply with multipart response!

    Ви повинні також усвідомити, що багато HTTP/1.1 servers не можуть мати цей характер, якщо ви будете вірити, щоб отримати рівне, ви збираєтеся отримати весь документ.

    FTP range downloads тільки підтримує simple syntax "start-stop" (optionally with one of the numbers omitted). Це залежить від non-RFC command SIZE.

    Якщо ця option is used several times, the last one will be used. -R/--remote-time Якщо ви використовуєте, це буде зробити libcurl примітка до пункту від часу мітки з remote file, і якщо це можливе виконання локального файлу get that same timestamp.

    Якщо ця опція використовується twice, в 2-х time disables this again. --retry Якщо transient error є відновленим, коли curl tries до виконання transfer, це буде видалити цей номер часу до того, як йти. Визначення номера до 0 curl do no retries (which is the default). Transient error means either: a timeout, an FTP 5xx response code або HTTP 5xx response code.

    Коли curl is about retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using --retry-delayви можете задати цей послідовний backoff algoritm. See also --retry-max-timeдо граничного терміну, що надається, для retries. (Added in 7.12.3)

    Якщо ця опція використовується найчастішими моментами, останній випадок вирішується назавжди. --retry-delay Make curl sleep this amount of time between each retry when a transfer has failed with a transient error (it changes the default backoff time algorithm between retries). Ця option is only interesting if --retry is also used. Налагодження цього робиться на 0, щоб зробити curl, використовуючи більш детальний backoff time. (Added in 7.12.3)

    Якщо ця опція використовується найчастішими моментами, останній випадок вирішується назавжди. --retry-max-time Retry timer is reset before the first transfer attempt. Retries will be done as usual (see --retry) as long as the timer hasn"t reached this given limit. Notice that if the timer hasn"t reached the limit, the request will be made and while performing, it may take longer than this given time period. Для того, щоб скористатися максимальним часом" -m/--max-time. Set this option to zero to not timeout retries. (Added in 7.12.3)

    Якщо ця опція використовується найчастішими моментами, останній випадок вирішується назавжди. -s/--silent Silent mode. Don't show progress meter or error messages. Makes Curl mute.

    Якщо ця функція використовується двадцять, вдруге буде заборонено безглуздий режим. -S/--show-error When used with -s it makes curl show error message if it fails.

    Якщо ця опція використовується twice, вдруге буде заборонено show show error. --socks4 Використовуйте спеціальний SOCKS4 proxy. Якщо номер port не є визначеним, він є зарахований на port 1080. (Added in 7.15.2)

    -x/--proxy

    Якщо ця option is used several times, the last one will be used. --socks5 Використовуйте спеціальний SOCKS5 proxy. Якщо номер port не є визначеним, він є зарахований на port 1080. (Added in 7.11.1)

    Ця опція overrides any previous use of -x/--proxy, як вони є mutually exclusive.

    Якщо ця option is used several times, the last one will be used. (Ця опція була попередньо вірно documented and used as --socks without number appended.) --stderr Об'єднати всі записи до stderr до спеціального файлу instead. Якщо файл ім'я є плашком "-", це використовується для написання до stdout. Ця опція не має значення, коли ви використовуєте shell with decent redirecting capabilities.

    Якщо ця option is used several times, the last one will be used. --tcp-nodelay Turn на TCP_NODELAY option. See the (3) man page for details про це рішення. (Added in 7.11.2)

    Якщо ця функція використовує кілька разів, всі випадки торкаються цього on/off. -t/--telnet-option Pass options до telnet protocol. Додаткові варіанти:

    TTYPE= Sets the terminal type.

    XDISPLOC= Sets the X display location.

    NEW_ENV= Sets an environment variable. -T/--upload-file Це перенесення спеціального локального файлу до remote URL. Якщо ви не маєте частину файлу в конкретній URL-адресі, Curl буде відображатися в локальному файлі ім'я. NOTE те, що ви повинні використовувати trailing / на останній directory для реального досліду, щоб вибрати те, що це немає файлу name або curl буде думати, що ваш останній directory name є remote file name to use. Що буде найбільш вірно спричинити завантаження операцій до невдачі. Якщо це використовується на http(s) server, PUT command will be used.

    Використовуйте файл name "-" (a single dash) для використання stdin instead of given file.

    Ви можете скористатися одним -T для всіх URL на command line. Each -T + URL типи specifies what to upload and to where. curl also supports "globbing" of -T argument, meanning, що ви можете завантажити кілька файлів до однієї URL за допомогою тієї ж URL-адреси globbing style supported in the URL, як це:

    FILES

    ~/.curlrc Default config file, see -K/--config for details.

    ENVIRONMENT

    http_proxy [:port] Sets proxy server для HTTP. HTTPS_PROXY [:port] Sets proxy server для використання HTTPS. FTP_PROXY [:port] Sets proxy server для використання для FTP. ALL_PROXY [:port] Sets proxy server для використання, якщо не protocol-specific proxy is set. NO_PROXY List of host names that shouldn"t go through any proxy. If set to a asterіsk "*" only, it matches all hosts.

    EXIT CODES

    Вони існують в різних different error codes і їх відповідних error messages that may appear during bad conditions. При часі цього повідомлення, запису кодів є: 1 Unsupported protocol. Ця будова curl не підтримує цей протокол. 2 Failed to initialize. 3 URL malformat. The syntax був некоректний. 4 URL-адреса malformatted. User-part of URL syntax був некоректним. 5 Couldn't resolve proxy. The given proxy host не може бути resolved. 6 Couldn't resolve host. Given remote host був невідповідний. 7 Використовується для підключення до host. 8 FTP weird server reply. The server sent data curl couldn't parse. 9 FTP access denied. . 10 FTP user/password incorrect. Будь-який один або один був неприйнятий на сервер. 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request. 13 FTP weird PASV reply, Curl couldn"t parse the reply sent to the PASV request. 14 FTP weird 227 format. Curl couldn"t parse the 227-line the server sent. 15 FTP може бути використаний. 16 FTP може бути невід'єднаним. 17 FTP couldn't set binary. Couldn't change transfer method to binary. 18 Partial file. Лише частина файлу була переведена. 19 FTP couldn"t download/access the given file, the RETR (or similar) command failed. 20 FTP write error. The transfer was reported bad by the server. HTTP page no retrieved.The requested url was not found or returned another error with HTTP error code being 400 or above. -f/--fail is used. 23 Write error. Curl couldn't write data to local filesystem or similar. 24 Malformed user. Server позбавляє STOR operation, використовуваного для FTP uploading. 26 Read error. Різні reading проблем. 27 Out of memory. A memory allocation request failed. 28 Operation timeout. Відповідний time-out період був відновлений відповідно до умов. 29 FTP couldn"t set ASCII. The server returned an unknown reply. 30 FTP PORT failed. The PORT command failed. The REST command failed. Цей Command використовується для обміну FTP transfers. 32 FTP може бути використаний SIZE. SIZE command failed. Command is extension to the original FTP spec RFC 959. 33 HTTP range error. The range "command" didn"t work. 34 HTTP post error. Internal post-request generation error. 35 SSL connect error. The SSL handshaking failed. 36 FTP bad download resume. Couldn't continue an earlier aborted download. 37 FILE couldn't read file. Помітно, щоб відкрити файл. Permissions? 38 LDAP не може бути. LDAP bind operation failed. 39 LDAP search failed. 40 Library not found. The LDAP library був невідомий. 41 Function not found. A функція LDAP не була заснована. 42 Aborted by callback. An application told curl до abort the operation. 43 Internal error. A функція була названа з поганим параметром. 44 Internal error. A функція була названа в поганому порядку. 45 Interface error. A specified outgoing interface could not be used. 46 Bad password entered. An error був signaled when the password був введений. 47 Too many redirects. Коли випливають реdirects, curl hit the maximum amount. 48 Unknown TELNET option specified. 49 Malformed telnet option. 51 Слухатиме SSL certificate wasn"t ok 52 The server didn"t reply anything, which here is considered error. 53 SSL crypto engine not found 54 Cannot set SSL crypto engine as default 55 отримання мережі data 57 Share is in use (internal error) 58 Проблема з локальним з'єднанням 59 Процедура використання спеціального SSL cipher 60 Problem with the CA cert (Path? Permission?) 61 Unrecognized transfer encoding 62 Invalid LDAP URL 63 exceeded 64 Requested FTP SSL рівень помилок 65 Попередження про те, що вимагається, що помилка 66 Захищена до процесу SSL Engine 67 На дисковому просторі на TFTP-сервері 71 Ilegal TFTP operation 72 Unknown TFTP transfer ID 73 File already exists (TFTP) 74 No such user (TFTP) 75 Character conversion failed 76 Character conversion functions required . Существующие ones є meant to never change.

    Пропонуємо до вашої уваги новий курс від команди The Codeby- "Тестування Веб-Додатків на проникнення з нуля". Загальна теорія, підготовка робочого оточення, пасивний фазинг та фінгерпринт, Активний фазинг, Вразливості, Пост-експлуатація, Інструментальні засоби, Social Engeneering та багато іншого.


    Джерело:

    cURL — це пакет програмного забезпечення, що складається з утиліти командного рядка та бібліотеки для передачі даних із використанням синтаксису URL.

    cURL підтримує безліч протоколів, серед них DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet та TFTP.

    Завантажити окремий файл

    Наступна команда отримає вміст URL і відобразить його у стандартному виведенні (тобто у терміналі).

    Curl https://mi-al.ru/ > mi-al.htm 100 14378 0 14378 0 0 5387 0 --:--:- - 0:00:02 --:--:-- 5387

    Збереження виводу cURL у файл

    • -o(o нижнього регістру) результат буде збережено у файлі, заданому в командному рядку
    • -O(O верхній регістр) ім'я файлу буде взято з URL і буде використано для збереження отриманих даних.
    $ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

    Тепер буде збережено сторінку gettext.html у файлі під назвою 'mygettext.html'. Коли curl запущена з опцією -o вона відображає шкалу прогресу завантаження наступним чином.

    % Total % Received % Xferd Average Speed ​​Time Time Time Current Dload Upload Total Spent Left Speed ​​66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 0 74 0 0:00:31 0:00:31 --:--:-- 68987

    Коли ви використовуєте curl -O (O верхнього регістра), вона сама по собі збереже вміст у файл під назвою gettext.html на локальній машині.

    $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html

    Примітка: Коли curl повинна писати дані в термінал, вона відключає шкалу прогресу, щоб не було плутанини в надрукованих даних. Ми можемо використовувати '>'|'-o'|'-O' опції для передачі результатів у файл.

    Вибірка декількох файлів одночасно

    Ми можемо завантажити кілька файлів за один раз, задавши всі URL у командному рядку.

    Curl -O URL1 -O URL2

    Команда нижче завантажить обидва index.html і gettext.html і збереже їх з тими самими іменами в поточній директорії.

    Curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

    Будь ласка, зверніть увагу, коли ми завантажуємо кілька файлів з одного сервера, як показано вище, curl спробує повторно використовувати з'єднання.

    Слідуємо за HTTP Location у заголовках з опцією -L

    За замовчуванням, CURL не слідує за HTTP Location у заголовках (редиректи). Коли запитана веб-сторінка переміщена в інше місце, відповідна відповідь буде передана в заголовках HTTP Location.

    Наприклад, коли хтось друкує google.com у рядку браузера зі своєї країни, вони автоматично будуть перенаправлені на google.co.xx. Це робиться на основі заголовка HTTP Location як показано нижче.

    Curl https://www.google.com/?gws_rd=ssl 302 Moved

    302 Moved

    The document has moved here.

    Наведений вище висновок каже, що запитуваний документ було переміщено до 'http://www.google.co.th/'.

    Ви можете вказати curl слідувати редиректам, це робиться за допомогою опції -L як показано нижче. Тепер буде завантажено вихідний код html із https://www.google.co.th/?gws_rd=ssl.

    Curl -L https://www.google.com/?gws_rd=ssl

    Продовження/Відновлення попереднього закачування

    Використовуючи опцію -C ви можете продовжити завантаження, яке було зупинено з будь-яких причин. Це буде корисним при обриві великих файлів.

    Якщо ми говоримо '-C -', curl буде шукати, з якого місця відновити завантаження. Ми також можемо поставити '-C<смещение>'. Задане усунення байт буде пропущено з початку вихідного файла.

    Почніть велике завантаження з curl і натисніть Ctrl-C для зупинки посеред завантаження.

    $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%

    Закачування було зупинено на 20.1%. Використовуючи “curl -C -” ми можемо продовжити завантаження з місця, де ми зупинилися. Тепер завантаження продовжиться з 20.1%.

    Curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%

    Обмеження швидкості передачі даних

    Ви можете обмежити величину швидкості передачі опцією -limit-rate. Ви можете передати максимальну швидкість як аргумент.

    $ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

    Команда вище обмежить швидкість передачі на 1000 байт/секунду. curl може використовувати швидкість вище на піках. Але середня швидкість буде приблизно 1000 байт/секунду.

    Нижче показано індикатор прогресу для представленої команди. Ви можете бачити, що поточна швидкість близько 1000 байт.

    % Total % Received % Xferd Average Speed ​​Time Time Time Current Dload Upload Total Spent Left Speed ​​1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 10 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999

    Завантажити файл тільки якщо він змінений до/після заданого часу

    Ви можете отримати файли, які були змінені після певного часу за допомогою опції -z в curl. Це буде працювати і для FTP, і для HTTP.

    $ curl -z 20-Aug-14

    Команда вище завантажить yy.html тільки якщо він змінювався пізніше, ніж задана дата і час.

    Команда вище завантажить файл file.html, якщо він змінювався до заданої дати та часу.

    Наберіть 'man curl_getdate', щоб дізнатися більше про різні підтримувані синтаксиси для виразів дати.

    Проходження аутентифікації HTTP у cURL

    Іноді веб-сайти потребують ім'я користувача та пароль для перегляду вмісту. За допомогою опції -u можна передати ці облікові дані з cURL на веб-сервер як показано нижче.

    $curl -u username:password URL

    Примітка: За промовчанням curl використовує базову HTTP автентифікацію. Ми можемо задати інші методи аутентифікації за допомогою -ntlm | -digest.

    Завантаження файлів з сервера FTP

    cURL також може використовуватися для завантаження файлів з FTP серверів. Якщо заданий FTP шлях є директорією, за промовчанням буде виведено список файлів у ній.

    $ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

    Команда вище завантажить файл xss.php з ftp-сервера та збереже його у локальній директорії.

    $ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

    Тут URL надсилає до директорії. Отже, cURL зробить список файлів та директорій за заданою URL-адресою.

    Список/Завантаження за допомогою діапазонів.

    CURL підтримує діапазони, задані в URL. Коли даний діапазон буде завантажено відповідні файли всередині цього діапазону. Це буде корисним при завантаженні пакетів із сайтів FTP дзеркал.

    $ curl ftp://ftp.uk.debian.org/debian/pool/main//

    Команда вище зробить список усіх пакетів у діапазоні a-z у терміналі.

    Вивантаження файлів на FTP-сервер

    Curl також може використовуватися для вивантаження на сервер FTP з опцією -T.

    $ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

    Команда вище завантажить файл з ім'ям myfile.txt на FTP-сервер. Ви можете також вивантажити кілька файлів за один раз, використовуючи діапазони.

    $ curl -u ftpuser:ftppass -T "(file1, file2)" ftp://ftp.testserver.com

    Опціонально ми можемо використовувати “.” для отримання зі стандартного введення та передачі його на віддалену машину.

    $ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

    Команда вище отримає висновок від користувача зі стандартного введення та збереже вміст на ftp-сервері під ім'ям myfile_1.txt.

    Ви можете задати '-T' для кожного URL, і кожна пара адрес-файл визначатиме, що куди вивантажувати

    Більше інформації зі збільшенням вербальності та опцією трасування

    Ви можете дізнатися, що відбувається, використовуючи опцію -v. Опція -v включає вербальний режим і друкуватиме подробиці.

    Curl -v https://www.google.co.th/?gws_rd=ssl

    Команда вище виведе наступне

    * Rebuilt URL to: https://www.google.co.th/?gws_rd=ssl * Hostname was NOT found in DNS cache * Trying 27.123.17.49... * Connected to www.google.co.th (27.123. 17.49) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.38.0 > Host: www.google.co.th > Accept: */* >< HTTP/1.1 200 OK < Date: Fri, 14 Aug 2015 23:07:20 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=windows-874 < P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info." * Server gws is not blacklisted < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1439593640:LM=1439593640:V=1:S=FfuoPPpKbyzTdJ6T; expires=Sun, 13-Aug-2017 23:07:20 GMT; path=/; domain=.google.co.th ... ... ...

    Якщо вам потрібно більше детальної інформації, то ви можете використовувати опцію -trace. Опція -trace увімкне повний дамп трасування всіх вхідних/вихідних даних для заданого файлу

    => Send header, 169 bytes (0xa9) 0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1.. 0010: 55 76 76 20 63 75 72 6c User-Agent: curl .. 0060: 2e 32 2e 33 2e 34 20 6c 69 62 69 64 6e 2f 31 2e .2.3.4 libidn/1. 0070: 31 35 20 6c 69 62 73 73 68 32 2f 31 2e 32 2e 36 15 libssh2/1.2.6 0080: 0d 0a 48 6f 73 74 3a 7 7 .Host: www.goog 0090 : 6c 65 2e 63 6f 2e 69 6e 0d 0a 41 63 63 65 70 74 le.co.xx..Accept 00a0: 3a 20 2a 2f 2a 0d 0a 0d 0a: */. , assume close after body<= Recv header, 17 bytes (0x11) 0000: 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d HTTP/1.0 200 OK. 0010: 0a

    Опції збільшення вербальності та трасування стануть у нагоді, коли curl зазнає невдачі з якихось причин і ми не знаємо чому.

    Отримуємо визначення слова та його переклад із використанням протоколу DICT

    Переглянути список доступних словників можна так:

    Curl dict://dict.org/show:db

    Отримати переклад слова з англійської на російську можна так:

    Curl dict://dict.org/d:girl:fd-eng-ukr 220 pan.alephnull.com dictd 1.12.1/rf on Linux 3.14-1-amd64 <[email protected]> 250 ок 150 1 definitions retrieved 151 "girl" fd-eng-ukr "English-Russian FreeDict Dictionary ver. 0.3" girl /gəːl/ дівчина. 250 ок 221 bye

    Більше інформації по DICT можна знайти прочитавши RFC2229.

    Використання проксі для завантаження файлу

    Ми можемо вказати cURL використовувати проксі для певних операцій, що робиться опцією -x. Нам потрібно задати хост та порт проксі.

    $ curl -x proxysever.test.com:3128 https://www.google.co.in/?gws_rd=ssl

    Надсилання електронної пошти з використанням протоколу SMTP у curl

    cURL також може бути використана для надсилання електронної пошти через протокол SMTP. Вам потрібно вказати адресу від когось, адресу кому та IP адресу поштового сервера як показано нижче.

    $ curl --mail-from [email protected]--mail-rcpt [email protected] smtp://mailserver.com

    Коли команда буде введена, почнеться очікування на введення користувачем даних для листа. Коли ви закінчите набирати повідомлення, надрукуйте. (точку) як останній рядок, і лист буде негайно надіслано.

    Subject: Testing Це є електронною поштою .

    Гарант є довіреним посередником між Учасниками під час угоди.



    Пропонуємо до вашої уваги новий курс від команди The Codeby- "Тестування Веб-Додатків на проникнення з нуля". Загальна теорія, підготовка робочого оточення, пасивний фазинг та фінгерпринт, Активний фазинг, Вразливості, Пост-експлуатація, Інструментальні засоби, Social Engeneering та багато іншого.


    Навіщо потрібна cURL

    • cURL чудово підходить для імітації дій користувача у браузері.

    Реальний практичний приклад: потрібно перезавантажити роутер (модем) для зміни IP адреси. Для цього потрібно: авторизуватись у роутері, перейти до сторінки обслуговування та натиснути кнопку «Перезавантаження». Якщо цю дію потрібно виконати кілька разів, процедуру потрібно повторити. Погодьтеся, робити щоразу вручну цю рутину не хочеться. cURL дозволяє все це автоматизувати. Буквально кількома командами cURL можна досягти авторизації та виконання завдання на роутері.

    • cURL зручний для отримання даних із веб-сайтів у командному рядку.

    Ще один приклад: ми хочемо реалізувати показ загальної статистики для декількох сайтів. Якщо використовувати cURL, то це стає цілком тривіальним завданням: за допомогою cURL ми проходимо автентифікацію на сервісі збору статистики (якщо це потрібно), потім (знову ж таки командами cURL) отримуємо необхідні сторінки, що парсують потрібні нам дані; процедура повторюється всім наших сайтів, потім ми складаємо і виводимо кінцевий результат.

    Тобто. випадки використання cURL цілком реальні, хоча в більшості cURL потрібна програмістам, які використовують її для своїх програм.

    cURL підтримує безліч протоколів і способів авторизації, вміє передавати файли, правильно працює з кукіз, підтримує SSL сертифікати, проксі та багато іншого.

    cURL у PHP та командному рядку

    Ми можемо використовувати cURL двома основними способами: у скриптах PHP та у командному рядку.

    Щоб увімкнути cURL у PHP на сервері, необхідно у файлі php.ini розкоментувати рядок

    Extension=php_curl.dll

    А потім перезавантажити сервер.

    На Linux потрібно встановити пакет curl.

    На Debian, Ubuntu або Linux Mint:

    $ sudo apt-get install curl

    На Fedora, CentOS або RHEL:

    $ sudo yum install curl

    Щоб наочно було видно різницю у використанні в PHP та в командному рядку, будемо одні й ті самі завдання виконувати двічі: спочатку у скрипті PHP, а потім у командному рядку. Постараємось при цьому не заплутатися.

    Отримання даних за допомогою cURL

    Отримання даних за допомогою cURL у PHP

    Приклад на PHP:

    Все дуже просто:

    $target_url- адреса сайту, який нас цікавить. Після адреси сайту можна поставити двокрапку і додати адресу порту (якщо порт відрізняється від стандартного).

    curl_init— ініціалізує новий сеанс та повертає дискриптор, який у нашому прикладі присвоюється змінною $ch.

    Потім ми виконуємо запит функцією cURL curl_exec, якою як параметр передається дискриптор.

    Все дуже логічно, але при виконанні цього скрипту на нашій сторінці відобразиться вміст сайту. А якщо ми не хочемо відображати вміст, а хочемо записати його в змінну (для подальшої обробки або парсингу).

    Трохи доповнимо наш скрипт:

    0) ( echo "Помилка curl: " . curl_error($ch); ) curl_close($ch); ?>

    У нас з'явився рядок curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

    curl_setopt- Задає опції. Повний список опцій можна знайти на цій сторінці: http://php.net/manual/ru/function.curl-setopt.php

    $response_data = curl_exec($ch);

    Тепер значення скрипта надається змінною $response_data, з якою можна проводити подальші операції. Наприклад, можна вивести її.

    If (curl_errno($ch) > 0) ( echo "Помилка curl: " . curl_error($ch); )

    служать для налагодження, у разі виникнення помилок.

    Отримання даних за допомогою cURL у командному рядку

    У командному рядку достатньо набрати

    Curl mi-al.ru

    де замість mi-al.ru- Адреса Вашого сайту.

    Якщо потрібно скопіювати дані до змінної, а не виводити отриманий результат на екран, то робимо так:

    Temp=`curl mi-al.ru`

    При цьому все одно виводяться деякі дані:

    Щоб вони не виводилися, додаємо ключ -s:

    Temp=`curl -s mi-al.ru`

    Можна подивитися, що записалось:

    Echo $ temp | less

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

    Аутентифікація, простіше кажучи, це введення імені користувача та пароля.

    Базова автентифікація – це автентифікація засобами сервера. Для цього створюються два файли: .htaccessі .htpasswd

    Вміст файлу.htaccess приблизно такий

    AuthName "Тільки для зареєстрованих користувачів!" AuthType Basic require valid-user AuthUserFile /home/freeforum.biz/htdocs/.htpassw

    Вміст файлу.htpasswd приблизно такий:

    Mial:CRdiI.ZrZQRRc

    Тобто. логін та хеш пароля.

    При спробі отримати доступ до запароленої папки, у браузері з'явиться приблизно таке вікно:

    HTTP автентифікація - це той випадок, коли ми вводимо логін та пароль у форму на сайті. Саме така автентифікація використовується при вході в пошту, форуми і т.д.

    Базова автентифікація cURL (PHP)

    Є сайт http://62.113.208.29/Update_FED_DAYS/, який вимагає від нас авторизуватися:

    Пробуємо наш початковий скрипт:

    0) ( echo "Помилка curl: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

    Хоча скрипт і вважає, що помилки немає, але результат, що виводиться, нам зовсім не подобається:

    Додаємо два рядки:

    Curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board: ru-board");

    Першим рядком ми задаємо тип аутентифікації – базова. Другий рядок містить ім'я та пароль через двокрапку (у нашому випадку ім'я та пароль однакові – ru-board). Вийшло так:

    0) ( echo "Помилка curl: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

    Базова автентифікація cURL (у командному рядку)

    Цього ж самого в командному рядку можна досягти одного рядка:

    Curl-u ru-board: ru-board http://62.113.208.29/Update_FED_DAYS/

    Я не забув вказати тип аутентифікації, просто в cURL базовий тип аутентифікації дефолтний.

    У командному рядку все вийшло так швидко, що від розладу я написав таку програму. Вона підключається до сайту та завантажує останнє оновлення:

    http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Update_FED_201(1).(2).(2).7z" | uniq | tail -n 1`; curl -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

    Буквально ще кількома командами можна додати:

    • розпакування архіву у вказаний каталог;
    • запуск оновлень КонсультантПлюс (це оновлення для нього);
    • можна реалізувати перевірку — було завантажено останнє доступне оновлення або з'явилося нове;
    • додати це все в Cron для щоденних оновлень.

    HTTP автентифікація cURL

    HTTP автентифікація cURL у PHP

    Нам треба знати:

    • адресу, куди надсилати дані для автентифікації
    • метод відправки GET чи POST
    • логін
    • пароль

    Іноді цих даних виявляється недостатньо. Давайте розберемося.

    Адресу, куди потрібно надіслати дані, можна взяти з форми автентифікації. Наприклад:

    Ми дивимося на властивість action. Тобто. кінцевою сторінкою є login.php. Нам потрібна повна адреса, наприклад така http://188.35.8.64:8080/login.php

    Тут же ми знаходимо і метод відправлення: method="post"

    Логін та пароль я теж знаю: admin та qwerasdfzxcv

    Про всяк випадок — це не мій роутер (і я не знаю чий), тому якщо ви хочете досадити саме мені, то не потрібно паскудити на цьому роутері.

    Тобто. на сервер із форми передається рядок методом POST. Теоретично, наш попередній скрипт, до якого ми додали новий рядок, має працювати. Тобто. має відбуватися аутентифікація.

    0) ( echo "Помилка curl: " . curl_error($ch); ) else ( ) curl_close($ch); ?>

    У скрипті новий рядок

    curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

    Тут curl_setopt— вже знайома нам функція встановлення опцій для cURL, CURLOPT_POSTFIELDS- Це ім'я опції, яку ми встановлюємо. CURLOPT_POSTFIELDSмістить усі дані, що передаються методом POST. Ну і сам рядок LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv— це ті дані, які ми передаємо.

    Якщо уважно вивчити форму, можна побачити, що вона містить і приховані поля. А ще дані можуть оброблятися або доповнюватися JavaScript. Можна зайнятися вивченням всього цього, але я віддаю перевагу більш простий спосіб.

    Я використовую Wireshark. Ця програма призначена для сніфінгу (перехоплення) трафіку. І саме в ній дуже зручно дивитися, що саме передається на сайт.

    Подивіться це крихітне відео:

    Тобто. з адресою, куди передаються дані, я вгадав. А ось рядок, що передається, виявився набагато складнішим.

    Я вписав правильний параметр, а також трохи допрацював скрипт, щоб він не просто авторизувався, а й дещо отримував з роутера:

    0) ( echo "Помилка curl: " . curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 = curl_init($target_url2); ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 = curl_exec($ch2); .ssid.value = "", "", $results2); $results2 = str_replace("";", "", $results2); echo "Ім'я wi-fi мережі: $results2
    "; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Пароль wi-fi мережі: $results3"; ) curl_close($ch); ?>

    До речі, якщо власник оновить пароль (але не оновить прошивку), новий пароль завжди можна подивитися за адресою http://188.35.8.64:8080/model/__show_info.php?REQUIRE_FILE=/var/etc/httpasswd

    (Це загальновідома вразливість роутерів D-Link DIR-300, D-Link DIR-320 та D-Link DAP-1353).

    HTTP автентифікація cURL у командному рядку

    Повну адресу, а також рядок, який потрібно передати, ми вже знаємо. Тому все просто:

    Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php

    Думаю, все і так зрозуміло, тому що ці терміни ми вже розглянули. Якщо комусь незрозуміло — питайте у коментарях.

    Прикладом використання cURL для отримання та парсингу даних може стати наступний набір команд:

    Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php > /nv/ "&& echo "Ім'я мережі Wi-Fi" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Пароль мережі Wi-Fi" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

    Складні випадки авторизації: AJAX, JQuery, JavaScript тощо.

    Дані заголовок правильніше було б написати так: "Складні" випадки авторизації. Тобто. слово "складні" взяти в лапки. Складними вони бачаться лише з погляду, коли незрозуміло: куди відбувається відправка, які імена полів, що саме вирушає тощо.

    Але насправді всі вони зводяться до методів POST або GET. Щоб зрозуміти, що саме відправляється, можна зберегти сторінку з формою собі на диск і кнопку відправки повісити функцію показу сформованих для відправки даних. Або ще простіше - як я, Wireshark"ом.

    Якщо дані правильні, а автентифікація не відбувається, потрібно копати в наступних напрямках:

    • задати правильний рядок реферера
    • задати «правильний» рядок користувача агента.

    Все це можна зробити базовими методами cURL, але я не на цьому зупинятимуся. Урок вийшов і без того великим, адже я ще хотів показати пару трюків із cURL.

    Типси та трикси cURL

    cURL та отримання кукіз крім CURLOPT_COOKIEJAR

    Думаю, вже стало зрозуміло, що cURL правильно обробляє куки - зберігає їх, використовує, коли сервер запитує, і т. д. Але іноді кукі потрібно зберегти. Для цього є опція CURLOPT_COOKIEJAR, але користуватися нею можна не завжди. Цьому і присвячено наш перший трюк.

    Іноді через особливості налаштування PHP на сервері нам недоступні такі опції як CURLOPT_COOKIEJAR (дозволяє зберегти отримані куки у файл) і CURLOPT_COOKIEFILE (дозволяє використовувати куки з файлу). Т.к. вони кажуть, що, використовуючи ці опції, ми зможемо стягнути будь-який файл з їхнього сервера. Ось вирішення цієї проблеми:

    1) Не використовуємо CURLOPT_FOLLOWLOCATION

    2) Використовуємо curl_setopt($ch, CURLOPT_HEADER, 1)

    3) Збираємо кукізи із заголовка header приблизно так:

    Preg_match_all("|Set-Cookie: (.*);|U", $content, $results); $cookies = implode(";", $results);

    4) Задаємо їх за допомогою curl_setopt($ch, CURLOPT_COOKIE, $cookies);

    Друга порада. З атакуючих ми можемо перетворитися на жертву. Щоб не стати жертвою атаки людина посередині, робимо так.

    Будь ласка, перестаньте встановлювати налаштування CURLOPT_SSL_VERIFYPEER на false або 0. Якщо ваша установка PHP не має актуального комплекту кореневих сертифікатів CA, завантажте один на веб-сайті curl і збережіть його на ваш сервер:

    Потім задайте шлях у вашому файлі php.ini file, наприклад, на Windows:

    Curl.cainfo=c:phpcacert.pem

    Відключення CURLOPT_SSL_VERIFYPEER дозволяє здійснити атаку людина посередині (MITM), а це нам не треба!

    Ну і остання на сьогодні підказка. Чи знаєте ви, що можлива велика кількість асинхронних запитів curl?

    Для цього можна використати curl_multi_init. Подробиці та приклад коду в офіційній документації http://php.net/manual/ru/function.curl-multi-init.php

    Про cURL у командному рядку

    Man curl

    Для читання російською мовою також підготовлено другу частину уроку cURL: " ".

    Гарант є довіреним посередником між Учасниками під час угоди.


    Життя веб-розробника затьмарене складнощами. Особливо неприємно, коли джерело цих труднощів невідоме. Чи це проблема з надсиланням запиту, чи з відповіддю, чи зі сторонньою бібліотекою, чи зовнішній API глючить? Існує купа різних приладів, здатних спростити нам життя. Ось деякі інструменти командного рядка, які особисто я вважаю безцінними.

    CURL
    cURL - програма передачі даних з різних протоколів, схожа на wget. Основна відмінність у тому, що за умовчанням wget зберігає файл, а cURL виводить у командний рядок. Так можна просто подивитися контент веб-сайту. Наприклад, ось як швидко отримати свій поточний зовнішній IP:

    $ curl ifconfig.me 93.96.141.93
    Параметри -i(показувати заголовки) та -I(показувати тільки заголовки) роблять cURL відмінним інструментом для дебаггінгу HTTP-відповідей та аналізу того, що саме сервер вам надсилає:

    $ curl -I habrahabr.ru HTTP/1.1 200 OK Server: nginx Дата: Thu, 18 Aug 2011 14:15:36 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Keep-alive: timeout=25
    Параметр -Lтеж корисний, він змушує cURL автоматично слідувати за редиректами. cURL підтримує HTTP-автентифікацію, cookies, тунелювання через HTTP-проксі, ручні налаштування в заголовках та багато іншого.

    Siege
    Siege – інструмент для навантажувального тестування. Плюс, у нього є зручна опція -g, яка дуже схожа на curl -iL, але також показує вам ще й заголовки http-запиту. Ось приклад з google.com (деякі заголовки видалені для стислості):

    $ siege -g www.google.com GET / HTTP/1.1 Host: www.google.com User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) Connection: close HTTP/1.1 302 Found Location: http:// www.google.co.uk/ Content-Type: text/html; charset=UTF-8 Server: gws Content-Length: 221 Connection: close GET / HTTP/1.1 Host: www.google.co.uk User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) Connection: close HTTP/ 1.1 200 OK Content-Type: text/html; charset = ISO-8859-1 X-XSS-Protection: 1; mode=block Connection: close
    Але для чого Siege дійсно чудово підходить, так це для тесту навантаження. Як і апачевський бенчмарк ab, він може відправити безліч паралельних запитів до сайту та подивитися, як він справляється з трафіком. У цьому прикладі показано, як ми тестуємо Google за допомогою 20 запитів протягом 30 секунд, після чого виводиться результат:

    $ siege -c20 www.google.co.uk -b -t30s ... Lifting the server siege... done. Transactions: 1400 hits Availability: 100.00 % Видалити час: 29.22 sec Data transferred: 13.32 MB Response time: 0.41 secs Transaction rate: 47.91 trans/sec Перевірка: 0.46 MB/sec Перевірка: 0.46 MB/sec transactions: 0 Longest transaction: 4.08 Shortest transaction: 0.08
    Одна з найкорисніших функцій Siege - те, що вона може працювати не лише з однією адресою, а й зі списком URL з файлу. Це відмінно підходить для навантажувального тестування, тому що можна моделювати реальний трафік на сайті, а не просто натискати один і той же URL знову і знову. Наприклад, як використовувати Siege, щоб навантажити сервер, використовуючи адреси з вашого лога Apache:

    $ cut -d " " -f7 /var/log/apache2/access.log > urls.txt $ siege -c -b -f urls.txt
    Ngrep
    Для серйозного аналізу трафіку існує Wireshark із тисячами налаштувань, фільтрів та конфігурацій. Є також версія для командного рядка tshark. Але для простих завдань функціонал Wireshark я вважаю зайвим. Так що доки мені не потрібна потужна зброя, я використовую . Він дозволяє робити з мережевими пакетами те саме, що grepробить із файлами.

    Для веб-трафіку ви завжди захочете використовувати параметр -W, щоб зберегти форматування рядків, а також параметр -q, що приховує надмірну інформацію про невідповідні пакети. Ось приклад команди, яка перехоплює всі пакети з командою GET чи POST:

    Ngrep -q -W byline "^(GET|POST).*"
    Ви можете додати додатковий фільтр для пакетів, наприклад, за заданим хостом, IP-адресою або портом. Ось фільтр для всього вхідного та вихідного трафіку на google.com, порт 80, який містить слово “search”.

    Ngrep -q -W byline "search" host www.google.com and port 80

    cURL - це спеціальний інструмент, який призначений для того, щоб передавати файли та дані синтаксисом URL. Ця технологія підтримує безліч протоколів, таких як HTTP, FTP, TELNET та багато інших. Спочатку cURL було розроблено для того, щоб бути інструментом командного рядка. На щастя, бібліотека cURL підтримується мовою програмування PHP. У цій статті ми розглянемо деякі розширені функції cURL, а також торкнемося практичного застосування отриманих знань засобами PHP.

    Чому cURL?

    Насправді існує чимало альтернативних способів вибірки змісту веб-сторінки. У багатьох випадках, головним чином через лінощі, я використовував прості PHP функції замість cURL:

    $content = file_get_contents("http://www.nettuts.com"); // чи $lines = file("http://www.nettuts.com"); // або readfile("http://www.nettuts.com");

    Однак ці функції не мають фактично ніякої гнучкості та містять величезну кількість недоліків у тому, що стосується обробки помилок тощо. Крім того, існують певні завдання, які ви просто не можете вирішити завдяки цим стандартним функціям: взаємодія з cookie, автентифікація, надсилання форми, завантаження файлів тощо.

    cURL - це потужна бібліотека, яка підтримує безліч різних протоколів, опцій та забезпечує докладну інформацію про URL-запити.

    Базова структура

    • Ініціалізація
    • Призначення параметрів
    • Виконання та вибірка результату
    • Звільнення пам'яті

    // 1. ініціалізація $ ch = curl_init(); // 2. вказуємо параметри, включаючи url curl_setopt ($ ch, CURLOPT_URL, "http://www.nettuts.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. отримуємо HTML як результат $output = curl_exec($ch); // 4. закриваємо з'єднання curl_close ($ ch);

    Крок #2 (тобто, виклик curl_setopt()) обговорюватимемо у цій статті набагато більше, ніж інші етапи, т.к. на цій стадії відбувається все найцікавіше та корисне, що вам необхідно знати. У cURL існує величезна кількість різних опцій, які повинні бути вказані, щоб мати можливість налаштувати URL-запит найретельніше. Ми не розглядатимемо весь список цілком, а зупинимося тільки на тому, що я вважаю за потрібне і корисне для цього уроку. Решту ви зможете вивчити самі, якщо ця тема вас зацікавить.

    Перевірка Помилки

    Крім того, ви також можете використовувати умовні оператори для перевірки виконання операції на успіх:

    // ... $ output = curl_exec ($ ch); if ($output === FALSE) ( echo "cURL Error: " . curl_error($ch); ) // ...

    Тут прошу відзначити собі дуже важливий момент: ми маємо використовувати “=== false” порівняння, замість “== false”. Для тих, хто не в курсі, це допоможе нам відрізняти порожній результат від значення бульового false, яке і буде вказувати на помилку.

    Отримання інформації

    Ще одним додатковим кроком є ​​отримання даних про запит cURL, після того, як він був виконаний.

    // ... curl_exec ($ ch); $info = curl_getinfo($ch); echo "Took". $info["total_time"] . "seconds for url". $info["url"]; // …

    Повертається масив містить таку інформацію:

    • "url"
    • "content_type"
    • "http_code"
    • "header_size"
    • "request_size"
    • "filetime"
    • "ssl_verify_result"
    • "redirect_count"
    • "total_time"
    • "namelookup_time"
    • "connect_time"
    • "pretransfer_time"
    • "size_upload"
    • "size_download"
    • "speed_download"
    • "speed_upload"
    • "download_content_length"
    • "upload_content_length"
    • "starttransfer_time"
    • "redirect_time"

    Виявлення перенаправлення залежно від браузера

    У цьому першому прикладі ми напишемо код, який зможе виявити перенаправлення URL, що базуються на різних налаштуваннях браузера. Наприклад, деякі веб-сайти перенаправляють браузери мобільного телефону або іншого пристрою.

    Ми збираємося використовувати опцію CURLOPT_HTTPHEADER для того, щоб визначити наші вихідні HTTP заголовки, включаючи назву браузера користувача та доступні мови. Зрештою, ми зможемо визначити, які сайти перенаправляють нас до різних URL.

    // Тестуємо URL $urls = array("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // тестуємо браузери $browsers = array("standard" => array ("user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6)) Gecko/20091201 Firefox/3.5 .6 (.NET CLR 3.5.30729)", "language" => "en-us,en;q=0.5"), "iphone" => array ("user_agent" => "Mozilla/5.0 (iPhone; U ;CPU як Mac OS X; en) AppleWebKit/420+ (KHTML, як Gecko) => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "language" => "fr,fr-FR;q=0.5")); foreach ($urls as $url) ( echo "URL: $url\n"; foreach ($browsers as $test_name => $browser) ( $ch = curl_init(); // вказуємо url curl_setopt($ch, CURLOPT_URL, $url);// вказуємо заголовки для браузера curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: ($browser["user_agent"])"", "Accept-Language: ($browser["language"])"" )), // нам не потрібно зміст сторінки curl_setopt($ch, CURLOPT_NOBODY, 1); // нам необхідно отримати HTTP заголовки curl_setopt($ch, CURLOPT_HEADER, 1); 1); $output = curl_exec($ch); curl_close($ch);// Чи був HTTP редирект? $test_name: redirects to $matches\n"; ) else ( echo "$test_name: no redirection\n"; ) ) echo "\n\n";

    Спочатку ми вказуємо список URL сайтів, які перевірятимемо. Точніше нам знадобляться адреси даних сайтів. Далі нам необхідно визначити налаштування браузера, щоб протестувати кожен із цих URL. Після цього ми скористаємося циклом, у якому пробіжимося за всіма отриманими результатами.

    Прийом, який ми використовуємо в цьому прикладі для того, щоб задати налаштування cURL, дозволить нам отримати не зміст сторінки, а лише заголовки HTTP (збережені в $output). Далі, скориставшись простим regex, ми можемо визначити, чи був рядок “Location:” в отриманих заголовках.

    Коли ви запустите цей код, то маєте отримати приблизно наступний результат:

    Створення запиту POST на певну URL

    При формуванні GET запиту дані можуть бути передані на URL через “рядок запиту”. Наприклад, коли ви робите пошук у Google, критерій пошуку розміщуються в адресному рядку нового URL:

    Http://www.google.com/search?q=ruseller

    Для того, щоб зімітувати цей запит, вам не потрібно скористатися засобами cURL. Якщо ліньки вас долає остаточно, скористайтеся функцією “file_get_contents()”, щоб отримати результат.

    Але річ у тому, що деякі HTML-форми надсилають запити POST. Дані цих форм транспортуються через тіло HTTP запиту, а не як у попередньому випадку. Наприклад, якщо ви заповнили форму на форумі і натиснули на кнопку пошуку, то швидше за все буде здійснено запит POST:

    http://codeigniter.com/forums/do_search/

    Ми можемо написати PHP скрипт, який може зімітувати цей вид URL запиту. Спочатку давайте створимо простий файл для прийняття та відображення POST даних. Назвемо його post_output.php:

    Print_r($_POST);

    Потім ми створюємо PHP скрипт, щоб виконати запит cURL:

    $url = "http://localhost/post_output.php"; $post_data = array ("foo" => "bar", "query" => "Nettuts", "action" => "Submit"); $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // вказуємо, що POST запит curl_setopt($ch, CURLOPT_POST, 1); // додаємо змінні curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;

    При запуску даного скрипту ви повинні отримати такий результат:

    Таким чином, запит POST був відправлений скрипту post_output.php, який у свою чергу, вивів суперглобальний масив $_POST, зміст якого ми отримали за допомогою cURL.

    завантаження файлу

    Спочатку давайте створимо файл для того, щоб сформувати його та відправити файлу upload_output.php:

    Print_r($_FILES);

    А ось і код скрипту, який виконує вказаний вище функціонал:

    $url = "http://localhost/upload_output.php"; $post_data = array ("foo" => "bar", // файл, який необхідно завантажити "upload" => "@C:/wamp/www/test.zip"); $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output;

    Коли ви хочете завантажити файл, все, що вам потрібно зробити, так це передати його як звичайну змінну post, попередньо помістивши перед нею символ @. При запуску написаного скрипту ви отримаєте наступний результат:

    Множинний cURL

    Однією із найсильніших сторін cURL є можливість створення "множинних" cURL обробників. Це дозволяє відкривати з'єднання до безлічі URL одночасно і асинхронно.

    У класичному варіанті cURL запиту виконання скрипта припиняється, і відбувається очікування завершення операції URL-адреси запиту, після чого робота скрипту може продовжитися. Якщо ви маєте намір взаємодіяти з безліччю URL, це призведе до досить-таки значних витрат часу, оскільки в класичному варіанті ви можете працювати тільки з одним URL за один раз. Однак ми можемо виправити цю ситуацію, скориставшись спеціальними обробниками.

    Давайте розглянемо приклад коду, який я взяв із php.net:

    // створюємо кілька ресурсів cURL $ch1 = curl_init(); $ ch2 = curl_init(); // вказуємо URL та інші параметри curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); curl_setopt($ch2, CURLOPT_HEADER, 0); //Створюємо множинний cURL обробник $mh = curl_multi_init(); //додаємо кілька обробників curl_multi_add_handle($mh,$ch1); curl_multi_add_handle($mh,$ch2); $active = null; //виконання do ( $mrc ​​= curl_multi_exec($mh, $active); ) while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active && $mrc ​​== CURLM_OK) ( if (curl_multi_select($mh) != -1) ( do ( $mrc ​​= curl_multi_exec($mh, $active); ) while ($mrc == CURLM_CALL_MULTI_PERFORM); ) ) //закриття curl_multi_remove_handle($mh, $ch1); curl_multi_remove_handle($mh, $ch2); curl_multi_close($mh);

    Ідея полягає в тому, що ви можете використовувати множинні cURL обробники. Використовуючи простий цикл, ви можете відстежити, які запити не виконалися.

    У цьому прикладі є два основні цикли. Перший цикл do-while викликає функцію curl_multi_exec(). Ця функція не блокується. Вона виконується з швидкістю, з якою може, і повертає стан запиту. Поки повернене значення є константою 'CURLM_CALL_MULTI_PERFORM', це означає, що робота ще не завершена (наприклад, зараз відбувається відправка http заголовків в URL); Саме тому ми продовжуємо перевіряти це значення, що повертається, поки не отримаємо інший результат.

    У наступному циклі ми перевіряємо умову, доки змінна $active = "true". Це другий параметр для функції curl_multi_exec(). Значення даної змінної дорівнюватиме "true", доки одна з існуючих змін є активним. Далі ми викликаємо функцію curl_multi_select(). Її виконання "блокується", доки існує хоч одне активне з'єднання, доки не буде отримано відповідь. Коли це станеться, ми повертаємося до основного циклу, щоб продовжити виконання запитів.

    А тепер давайте застосуємо отримані знання на прикладі, який буде реально корисним для великої кількості людей.

    Перевіряємо посилання на WordPress

    Уявіть собі блог із величезною кількістю постів та повідомлень, у кожному з яких є посилання на зовнішні інтернет ресурси. Деякі з цих посилань з різних причин могли б бути «мертвими». Можливо, сторінку було видалено або сайт зовсім не працює.

    Ми збираємося створити скрипт, який проаналізує всі посилання і знайде веб-сайти, що не завантажуються, і сторінки 404, після чого надасть нам докладний звіт.

    Відразу скажу, що це не приклад створення плагіна для WordPress. Це всього лише хороший полігон для наших випробувань.

    Давайте нарешті почнемо. Спочатку ми повинні зробити вибірку всіх посилань із бази даних:

    // Конфігурація $db_host = "localhost"; $ db_user = "root"; $db_pass = ""; $db_name = "wordpress"; $excluded_domains = array("localhost", "www.mydomain.com"); $max_connections = 10; // ініціалізація змінних $url_list = array(); $working_urls = array(); $dead_urls = array(); $not_found_urls = array(); $active = null; // підключаємося до MySQL if (!mysql_connect($db_host, $db_user, $db_pass)) ( die("Could not connect: " . mysql_error()); ) if (!mysql_select_db($db_name)) not select db: " . mysql_error()); ) // вибираємо всі опубліковані пости, де є посилання $q = "SELECT post_content FROM wp_posts WHERE post_content LIKE "%href=%" AND post_status = "publish" AND post_type = "post ""; $r = mysql_query($q) або die(mysql_error()); while ($d = mysql_fetch_assoc($r)) ( // робимо вибірку посилань за допомогою регулярних виразів if (preg_match_all("!href=\"(.*?)\"!", $d["post_content"], $ matches)) ( foreach ($matches as $url) ( $tmp = parse_url($url); if (in_array($tmp["host"], $excluded_domains)) ( continue; ) $url_list = $url; ) ) ) // забираємо дублікати $url_list = array_values(array_unique($url_list)); if (!$url_list) ( die("No URL to check"); )

    Спочатку ми формуємо конфігураційні дані взаємодії з базою даних, далі пишемо список доменів, які братимуть участь у перевірці ($excluded_domains). Також ми визначаємо число, яке характеризує кількість максимальних одночасних з'єднань, які ми будемо використовувати у нашому скрипті ($max_connections). Потім ми приєднуємося до бази даних, вибираємо пости, які містять посилання, та накопичуємо їх у масив ($url_list).

    Наступний код трохи складний, так що розберіться в ньому від початку до кінця:

    // 1. множинний обробник $ mh = curl_multi_init (); // 2. додаємо безліч URL for ($i = 0; $i< $max_connections; $i++) { add_url_to_multi_handle($mh, $url_list); } // 3. инициализация выполнения do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 4. основной цикл while ($active && $mrc == CURLM_OK) { // 5. если всё прошло успешно if (curl_multi_select($mh) != -1) { // 6. делаем дело do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); // 7. если есть инфа? if ($mhinfo = curl_multi_info_read($mh)) { // это значит, что запрос завершился // 8. извлекаем инфу $chinfo = curl_getinfo($mhinfo["handle"]); // 9. мёртвая ссылка? if (!$chinfo["http_code"]) { $dead_urls = $chinfo["url"]; // 10. 404? } else if ($chinfo["http_code"] == 404) { $not_found_urls = $chinfo["url"]; // 11. рабочая } else { $working_urls = $chinfo["url"]; } // 12. чистим за собой curl_multi_remove_handle($mh, $mhinfo["handle"]); // в случае зацикливания, закомментируйте данный вызов curl_close($mhinfo["handle"]); // 13. добавляем новый url и продолжаем работу if (add_url_to_multi_handle($mh, $url_list)) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } } } } // 14. завершение curl_multi_close($mh); echo "==Dead URLs==\n"; echo implode("\n",$dead_urls) . "\n\n"; echo "==404 URLs==\n"; echo implode("\n",$not_found_urls) . "\n\n"; echo "==Working URLs==\n"; echo implode("\n",$working_urls); function add_url_to_multi_handle($mh, $url_list) { static $index = 0; // если у нас есть ещё url, которые нужно достать if ($url_list[$index]) { // новый curl обработчик $ch = curl_init(); // указываем url curl_setopt($ch, CURLOPT_URL, $url_list[$index]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_multi_add_handle($mh, $ch); // переходим на следующий url $index++; return true; } else { // добавление новых URL завершено return false; } }

    Тут я спробую викласти все по поличках. Числа у списку відповідають числам у коментарі.

    1. 1. Створюємо множинний обробник;
    2. 2. Функцію add_url_to_multi_handle() ми напишемо трохи пізніше. Щоразу, коли вона буде викликатися, почнеться обробка нового URL. Спочатку ми додаємо 10 ($max_connections) URL;
    3. 3. Щоб розпочати роботу, ми повинні запустити функцію curl_multi_exec(). Доки вона повертатиме CURLM_CALL_MULTI_PERFORM, нам ще є, що робити. Це нам потрібно головним чином для того, щоб створити з'єднання;
    4. 4. Далі слідує основний цикл, який буде виконуватися доти, доки ми маємо хоч одне активне з'єднання;
    5. 5. curl_multi_select() зависає в очікуванні, поки пошук URL не завершиться;
    6. 6. І знову ми повинні змусити cURL виконати деяку роботу, а саме, зробити вибірку даних відповіді, що повертається;
    7. 7. Тут відбувається перевірка інформації. В результаті виконання запиту буде повернено масив;
    8. 8. У поверненому масиві присутній cURL обробник. Його ми і будемо використовувати для того, щоб вибрати інформацію про окремий запит cURL;
    9. 9. Якщо посилання було мертвим, або час виконання скрипту вийшов, то нам не слід шукати ніякого http коду;
    10. 10. Якщо посилання повернуло нам сторінку 404, http код буде містити значення 404;
    11. 11. Інакше перед нами знаходиться робоче посилання. (Ви можете додати додаткові перевірки на код помилки 500 тощо);
    12. 12. Далі ми видаляємо cURL обробник, тому що більше його не потребуємо;
    13. 13. Тепер ми можемо додати інший URL і запустити все те, про що говорили до цього;
    14. 14. На цьому кроці скрипт завершує свою роботу. Ми можемо видалити все, що нам не потрібно, і сформувати звіт;
    15. 15. Зрештою, напишемо функцію, яка додаватиме url в обробник. Статична змінна $index збільшуватиметься кожного разу, коли ця функція буде викликана.

    Я використав цей скрипт на своєму блозі (з деякими непрацюючими посиланнями, які додав навмисне для того, щоб протестувати його роботу) і отримав наступний результат:

    У моєму випадку, скрипту потрібно трохи менше 2 секунд, щоб пробігтися по 40 URL. Збільшення продуктивності є суттєвим при роботі з ще більшою кількістю URL-адрес. Якщо ви відкриваєте десять з'єднань одночасно, то скрипт може виконатися вдесятеро швидше.

    Пару слів про інші корисні опції cURL

    HTTP Аутентифікація

    Якщо на URL-адресі є HTTP автентифікація, то ви легко можете скористатися наступним скриптом:

    $url = "http://www.somesite.com/members/"; $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // вказуємо ім'я та пароль curl_setopt($ch, CURLOPT_USERPWD, "myusername: mypassword"); // якщо перенаправлення дозволено curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // то збережемо наші дані в cURL curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1); $output = curl_exec($ch); curl_close($ch);

    FTP завантаження

    У PHP також є бібліотека для роботи з FTP, але вам нічого не заважає і тут скористатися засобами cURL:

    // відкриваємо файл $file = fopen("/path/to/file", "r"); // У url має бути наступний зміст $url = "ftp://username: [email protected]:21/path/to/new/file"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); // curl_setopt($ch, CURLOPT_INFILESIZE, filesize("/path/to/file")); ($ch);curl_close($ch);

    Використовуємо Проксі

    Ви можете виконати свій URL запит через проксі:

    $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // вказуємо адресу curl_setopt($ch, CURLOPT_PROXY, "11.11.11.11:8080"); // якщо необхідно надати ім'я користувача та пароль curl_setopt($ch, CURLOPT_PROXYUSERPWD,"user:pass"); $output = curl_exec($ch); curl_close ($ ch);

    Функції зворотного дзвінка

    Також існує можливість вказати функцію, яка спрацьовуватиме ще до завершення роботи cURL запиту. Наприклад, поки вміст відповіді завантажується, ви можете почати використовувати дані, не чекаючи повного завантаження.

    $ ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://net.tutsplus.com"); curl_setopt($ch, CURLOPT_WRITEFUNCTION, "progress_function"); curl_exec($ch); curl_close ($ ch); function progress_function($ch,$str) ( echo $str; return strlen($str); )

    Подібна функція ПОВИННА повертати довжину рядка, що є обов'язковою вимогою.

    Висновок

    Сьогодні ми познайомилися з тим, як можна застосувати бібліотеку cURL у своїх корисливих цілях. Я сподіваюся, що вам сподобалася ця стаття.

    Дякую! Вдалого дня!