نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

ابزار خط فرمان curl. مقدمه ای بر cURL

این مقاله فرض می کند که شما اصول اولیه شبکه و HTML را می دانید.

توانایی نوشتن اسکریپت هنگام ساخت یک کالا ضروری است سیستم کامپیوتری. توسعه پذیری سیستم های یونیکس با استفاده از اسکریپت های پوسته و برنامه های مختلفاجرا کردن دستورات خودکار- این یکی از دلایل موفقیت آنهاست.

افزایش تعداد برنامه هایی که در حال حرکت به وب هستند باعث شده است که موضوع اسکریپت های HTTP به طور فزاینده ای محبوب شود. وظایف مهم در این زمینه هستند استخراج خودکاراطلاعات از اینترنت، ارسال یا آپلود داده به سرورهای وب و غیره.

حلقه - ابزار خط فرمان، که به شما امکان می دهد دستکاری URL و انتقال انواع مختلف را انجام دهید. این مقاله بر روی ایجاد درخواست های HTTP ساده تمرکز دارد. فرض بر این است که شما از قبل می دانید کجا تایپ کنید

# حلقه -- کمک

# حلقه --دستی

برای اطلاعات در مورد کرل

کرل ابزاری نیست که همه کارها را برای شما انجام دهد. درخواست ایجاد می کند، داده دریافت می کند و داده ارسال می کند. ممکن است به نوعی "چسب" نیاز داشته باشید تا همه چیز را در کنار هم نگه دارد، شاید زبان برنامه نویسی (مانند bash) یا برخی تماس های دستی.

1. پروتکل HTTP

HTTP پروتکلی است که هنگام دریافت داده از سرورهای وب استفاده می شود. این یک پروتکل بسیار ساده است که بر روی TCP/IP ساخته شده است. این پروتکل همچنین اجازه می دهد تا اطلاعات از طریق سرویس گیرنده به سرور با استفاده از چندین روش ارسال شود، همانطور که بعدا نشان داده خواهد شد.

HTTP رشته‌هایی از متن ASCII است که از یک کلاینت به یک سرور برای درخواست برخی اقدامات ارسال می‌شود. هنگامی که یک درخواست دریافت می شود، سرور با چندین سرویس به مشتری پاسخ می دهد رشته های متنیو سپس خود محتوا.

با استفاده از سوئیچ curl -v، می توانید ببینید که curl چه دستوراتی را به سرور ارسال می کند و همچنین سایر متن های اطلاعاتی را. سوئیچ -v شاید تنها راه برای اشکال زدایی یا حتی درک تعامل بین curl و وب سرور باشد.

2. URL

فرمت URL (Uniform Resource Locator) آدرس یک منبع خاص در اینترنت را مشخص می کند. احتمالاً این را می دانید، به عنوان مثال آدرس های اینترنتی: http://curl.haxx.se یا https://yourbank.com.

3. دریافت (GET) صفحه

ساده ترین و رایج ترین درخواست HTTP دریافت محتوای یک URL است. URL می تواند به یک صفحه وب، تصویر یا فایل پیوند دهد. مشتری یک درخواست GET را به سرور ارسال می کند و سند درخواستی را دریافت می کند. اگر دستور را اجرا کنید

# حلقه http://curl.haxx.se

شما یک صفحه وب خروجی به پنجره ترمینال خود دریافت خواهید کرد. سند کامل HTML موجود در این URL.

همه پاسخ‌های HTTP شامل مجموعه‌ای از هدرها هستند که معمولاً پنهان هستند. برای مشاهده آنها به همراه خود سند، از سوئیچ curl -i استفاده کنید. شما همچنین می توانید فقط هدرها را با استفاده از سوئیچ -I درخواست کنید (که کرل را مجبور می کند درخواست HEAD را ارسال کند).

4. اشکال

فرم ها روش اصلی ارائه یک وب سایت به عنوان یک صفحه HTML با فیلدهایی هستند که کاربر داده ها را در آن وارد می کند و سپس روی دکمه "OK" یا "Submit" کلیک می کند و پس از آن داده ها به سرور ارسال می شود. سپس سرور از داده های دریافتی استفاده می کند و تصمیم می گیرد که چه کاری انجام دهد: اطلاعات را در پایگاه داده جستجو کنید، آدرس وارد شده را روی نقشه نشان دهید، یک پیام خطا اضافه کنید یا از اطلاعات برای احراز هویت کاربر استفاده کنید. البته برنامه ای در سمت سرور وجود دارد که اطلاعات شما را دریافت می کند.

4.1 دریافت کنید

فرم GET استفاده می کند روش GET، به عنوان مثال به شرح زیر است:

اگر این کد را در مرورگر خود باز کنید، فرمی را مشاهده خواهید کرد فیلد متنیو یک دکمه با عنوان "OK". اگر "1905" را وارد کنید و روی OK کلیک کنید، مرورگر یک URL جدید ایجاد می کند که آن را دنبال می کند. URL به صورت رشته ای متشکل از مسیر URL قبلی و رشته ای مانند "junk.cgi?birthyear=1905&press=OK" نمایش داده می شود.

به عنوان مثال، اگر فرم در آدرس "www.hotmail.com/when/birth.html" قرار داشت، با کلیک بر روی OK به آدرس اینترنتی "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK می برید. "

اکثریت موتورهای جستجواینجوری کار کن

برای اینکه curl یک درخواست GET ایجاد کند، کافی است آنچه را که از فرم انتظار داشتید وارد کنید:

# curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"

4.2 POST

روش GET باعث می شود که تمام اطلاعات وارد شده در نمایش داده شود نوار آدرسمرورگر شما. این ممکن است زمانی خوب باشد که شما نیاز به نشانک گذاری یک صفحه دارید، اما زمانی که در فیلدهای فرم تایپ می کنید یک نقطه ضعف آشکار است. اطلاعات سری، یا زمانی که مقدار اطلاعات وارد شده در فیلدها خیلی زیاد است (که منجر به URL غیرقابل خواندن می شود).

پروتکل HTTP روش POST را ارائه می دهد. با آن، کلاینت داده ها را جدا از URL ارسال می کند و بنابراین شما آن را در نوار آدرس نخواهید دید.

فرمی که درخواست POST را ایجاد می کند مشابه فرم قبلی است:

Curl می تواند یک درخواست POST با همان داده های زیر ایجاد کند:

# curl -d "birthyear=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

این درخواست POST از "Content-Type application/x-www-form-urlencoded" استفاده می کند که پرکاربردترین روش است.

داده هایی که به سرور ارسال می کنید باید به درستی کدگذاری شوند، curl این کار را برای شما انجام نمی دهد. به عنوان مثال، اگر می خواهید داده ها حاوی یک فاصله باشند، باید آن را با %20 و غیره جایگزین کنید. عدم توجه به این موضوع - اشتباه رایج، که باعث می شود داده ها به اشتباه منتقل شوند.

در سال 1995 مشخص شد روش اضافیانتقال داده از طریق HTTP این در RFC 1867 مستند شده است، بنابراین این روش گاهی اوقات RFC1867-posting نامیده می شود.

این روش عمدتا برای پشتیبانی بهتردانلود فایل ها. فرمی که به کاربر اجازه می دهد یک فایل را آپلود کند در HTML چیزی شبیه به این است:

توجه داشته باشید که Content-Type روی multipart/form-data تنظیم شده است.

برای ارسال داده به این فرم با استفاده از curl، دستور را وارد کنید:

# curl -F upload=@localfilename -F فشار دهید=OK

4.4 زمینه های پنهان

یک روش رایج برای انتقال اطلاعات وضعیت در برنامه های HTML استفاده از فیلدهای پنهان در فرم ها است. فیلدهای مخفی پر نمی شوند، برای کاربر نامرئی هستند و به همان شیوه فیلدهای معمولی منتقل می شوند.

یک مثال ساده از یک فرم با یک فیلد قابل مشاهده، یک فیلد پنهان و یک دکمه OK:

برای ارسال درخواست POST با استفاده از curl، لازم نیست به این فکر کنید که آیا فیلد مخفی است یا خیر. برای فر همه آنها یکسان هستند:

# curl -d "birthyear=1905&press=OK&person=daniel"

4.5 بیابید که درخواست POST چگونه است

هنگامی که می خواهید فرمی را پر کنید و داده ها را با استفاده از curl به سرور ارسال کنید، احتمالاً می خواهید که درخواست POST دقیقاً شبیه درخواستی باشد که با استفاده از مرورگر ساخته شده است.

یک راه آسان برای مشاهده درخواست POST شما این است که صفحه HTML را با فرم در دیسک ذخیره کنید، روش را به GET تغییر دهید و روی دکمه "ارسال" کلیک کنید (همچنین می توانید URL را که داده ها به آن ارسال می شود تغییر دهید).

همانطور که انتظار می رود هنگام استفاده از فرم های GET، داده های پیوست شده به URL را خواهید دید که با نویسه های "?" از هم جدا شده اند.

5. قرار دادن

شاید، بهترین راهآپلود داده ها در سرور HTTP با استفاده از PUT انجام می شود. باز هم، این نیاز به یک برنامه (اسکریپت) در باطن دارد که می داند چه کاری انجام دهد و چگونه جریان HTTP PUT را بپذیرد.

ارسال فایل به سرور با استفاده از curl:

# curl -T آپلود فایل www.uploadhttp.com/receive.cgi

6. احراز هویت

احراز هویت - ارسال یک نام کاربری و رمز عبور به سرور، پس از آن بررسی می کند که آیا شما حق دارید درخواست مورد نیاز را تکمیل کنید. احراز هویت اولیه (که curl به طور پیش فرض از آن استفاده می کند) بر اساس آن است متن ساده، به این معنی که نام کاربری و رمز عبور رمزگذاری نمی شوند، بلکه با استفاده از الگوریتم Base64 فقط کمی "مه آلود" می شوند و این امکان را برای مهاجمان فراهم می کند که این اطلاعات را در مسیر بین شما و سرور HTTP پیدا کنند.

به کرل گفتن از نام کاربری و رمز عبور استفاده کند:

# curl -u name:password www.secrets.com

سایت ممکن است به استفاده از روش احراز هویت دیگری نیاز داشته باشد (به آنچه که سرور در سرصفحه ها می نویسد نگاه کنید)، در این موارد می توانید از سوئیچ های --ntlm، --digest، --negotiate یا حتی --anyauth استفاده کنید. گاهی اوقات دسترسی به سرورهای HTTP خارجی از طریق یک پروکسی اتفاق می افتد، این اغلب در شرکت ها و شرکت ها انجام می شود. یک پروکسی HTTP ممکن است برای دسترسی به اینترنت به نام کاربری و رمز عبور شما نیاز داشته باشد. کلید حلقه مربوطه:

# curl -U proxyuser:proxypassword curl.haxx.se

اگر پروکسی نیاز به احراز هویت با استفاده از روش NTLM دارد، --proxy-ntlm و اگر متد Digest است، سپس --proxy-digest را مشخص کنید.

اگر رمز عبوری را در گزینه های -u و -U مشخص نکنید، curl از شما آن را در داخل درخواست می کند حالت تعاملی.

توجه داشته باشید که وقتی curl در حال اجرا است، رشته راه‌اندازی (و همراه با کلیدها و رمزهای عبور) ممکن است برای سایر کاربران سیستم شما در لیست کار قابل مشاهده باشد. راه هایی برای جلوگیری از این امر وجود دارد. بیشتر در این مورد در زیر.

7. ارجاع دهنده

درخواست HTTP ممکن است شامل یک فیلد "ارجاع کننده" باشد که نشان می دهد کاربر از کدام URL آمده است این منبع. برخی از برنامه ها/اسکریپت ها فیلد "ارجاع کننده" را بررسی می کنند و اگر کاربر از صفحه ناشناخته ای آمده باشد، درخواست را اجرا نمی کنند. اگرچه این روش احمقانه ای برای بررسی است، اما بسیاری از اسکریپت ها هنوز از آن استفاده می کنند. با curl می توانید هر چیزی را در قسمت "ارجاع کننده" قرار دهید و در نتیجه آن را کاری کنید که شما می خواهید.

این کار به صورت زیر انجام می شود:

# curl -e http://curl.haxx.se daniel.haxx.se

8. عامل کاربر

همه درخواست‌های HTTP از یک فیلد «User-Agent» پشتیبانی می‌کنند که مشخص می‌کند برنامه مشتریکاربر. بسیاری از برنامه های کاربردی وب از این اطلاعات برای نمایش صفحه به روشی یا دیگری استفاده می کنند. برنامه نویسان وب چندین نسخه از یک صفحه را برای کاربران ایجاد می کنند مرورگرهای مختلفبه منظور بهبود ظاهر، استفاده از انواع مختلف اسکریپت های جاوا اسکریپت، vbscript و غیره

گاهی اوقات ممکن است متوجه شوید که curl صفحه ای متفاوت از آنچه در مرورگر خود دیده اید باز می گرداند. در این صورت مناسب است از قسمت «عامل کاربر» برای فریب مجدد سرور استفاده شود.

مخفی کردن حلقه به عنوان اینترنت اکسپلورردر دستگاه ویندوز 2000:

# curl -A "Mozilla/4.0 (سازگار؛ MSIE 5.01؛ Windows NT 5.0)"

چرا در یک ماشین لینوکس (PIII) به Netscape 4.73 تبدیل نمی شوید:

# curl -A "Mozilla/4.73 (X11; U; Linux 2.2.15 i686)"

9. تغییر مسیر

هنگام پاسخگویی به درخواست شما، سرور ممکن است نشانی از جایی که مرورگر باید در کنار آن قرار گیرد تا به جای خود صفحه به صفحه برسد را نشان دهد. صفحه مورد نظر. هدری که به مرورگر می‌گوید تغییر مسیر دهد «مکان:» است.

به طور پیش فرض، curl به آدرس مشخص شده در "Location:" نمی رود، بلکه به سادگی صفحه را طبق معمول نمایش می دهد. اما شما می توانید آن را به این صورت هدایت کنید:

# curl -L www.sitethatredirects.com

اگر از curl برای ارسال درخواست‌های POST به سایتی استفاده می‌کنید که بلافاصله به صفحه دیگری هدایت می‌شود، می‌توانید با خیال راحت از ترکیب -L و -d/-F استفاده کنید. Curl یک درخواست POST برای صفحه اول و سپس یک درخواست GET برای صفحه بعدی ایجاد می کند.

10. کوکی ها

با کوکی ها، مرورگرهای وب وضعیت سمت مشتری را کنترل می کنند. کوکی نامی است که محتوای آن پیوست شده است. با ارسال کوکی‌ها، سرور مسیر و نام میزبانی را که دفعه بعد باید کوکی‌ها به آن ارسال شود، طول عمر کوکی‌ها و برخی پارامترهای دیگر را به مشتری می‌گوید.

هنگامی که یک کلاینت در آدرس مشخص شده در کوکی پذیرفته شده به سرور متصل می شود، کلاینت آن کوکی را به سرور می فرستد (اگر طول عمر منقضی نشده باشد).

بسیاری از برنامه ها و سرورها از این روش برای ترکیب چندین درخواست در یک جلسه منطقی استفاده می کنند. برای اینکه curl نیز این عملکرد را انجام دهد، باید بتوانیم مانند مرورگرها کوکی ها را ذخیره و ارسال کنیم.

ساده ترین راه برای ارسال یک کوکی به سرور هنگام دریافت صفحه با استفاده از curl اضافه کردن سوئیچ مناسب در خط فرمان است:

# curl -b "name=Daniel" www.cookiesite.com

کوکی ها به عنوان هدرهای معمولی HTTP ارسال می شوند. این به curl اجازه می‌دهد تا کوکی‌ها را با ذخیره هدرها ذخیره کند. ذخیره کوکی ها با استفاده از curl با دستور زیر انجام می شود:

# curl -D headers_and_cookies www.cookiesite.com

(به هر حال، برای ذخیره کوکی ها بهتر است از سوئیچ -c استفاده کنید، بیشتر در مورد آن در زیر).

curl دارای یک کنترل کننده کوکی با امکانات کامل است که زمانی مفید است که می خواهید دوباره به سرور متصل شوید و از کوکی های ذخیره شده آخرین بار (یا اصلاح دستی) استفاده کنید. برای استفاده از کوکی های ذخیره شده در یک فایل، curl را به این صورت فراخوانی کنید:

# curl -b کوکی های_ذخیره_در_فایل www.cookiesite.com

وقتی سوئیچ -b را مشخص می‌کنید، «موتور کوکی» Curl فعال می‌شود. اگر فقط می‌خواهید که curl کوکی‌ها را بپذیرد، از -b برای تعیین فایلی استفاده کنید که وجود ندارد. به عنوان مثال، اگر می‌خواهید curl کوکی‌ها را از یک صفحه بپذیرد و سپس یک تغییر مسیر را دنبال کنید (شاید کوکی را که به تازگی پذیرفته است را ارائه دهید)، می‌توانید curl را به این صورت صدا بزنید:

# curl -b nada -L www.cookiesite.com

Curl می تواند کوکی ها را در قالب Netscape و Mozilla بخواند و بنویسد. این راه راحتتبادل کوکی ها بین مرورگرها و اسکریپت های خودکار. سوئیچ -b به طور خودکار تعیین می کند که آیا این فایلکوکی مرورگرهای مشخص شدهو بر این اساس آن را مدیریت می کند، و با استفاده از سوئیچ -c/--cookie-jar می توانید وقتی عملیات کامل شد، curl را مجبور کنید یک کوکی جدید بنویسد:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

راه های مختلفی برای ایمن سازی انتقال HTTP شما وجود دارد. اکثر پروتکل معروف، که این مشکل را حل می کند HTTPS یا HTTP از طریق SSL است. SSL تمام داده های ارسال و دریافت شده از طریق شبکه را رمزگذاری می کند و احتمال حفظ خصوصی بودن اطلاعات شما را افزایش می دهد.

Curl از درخواست ها به سرورهای HTTPS با استفاده از کتابخانه رایگان OpenSSL پشتیبانی می کند. درخواست ها در حال انجام است به روش معمول:

# حلقه https://that.secure.server.com

11.1 گواهینامه ها

در دنیای HTTPS، علاوه بر نام کاربری و رمز عبور برای احراز هویت، از گواهی‌ها استفاده می‌کنید. Curl از گواهی های سمت مشتری پشتیبانی می کند. همه گواهی ها با یک عبارت عبور قفل می شوند که باید قبل از اینکه curl بتواند با آنها کار کند وارد کنید. عبارت کلیدیرا می توان در خط فرمان مشخص کرد یا به صورت تعاملی وارد کرد. گواهی ها در کرل به شرح زیر استفاده می شود:

# curl -E mycert.pem https://that.secure.server.com

Curl همچنین با بررسی گواهی سرور در برابر گواهی ذخیره شده محلی، صحت سرور را تأیید می کند. اگر ناهماهنگی وجود داشته باشد، curl از اتصال خودداری می کند. برای نادیده گرفتن بررسی های احراز هویت، از سوئیچ -k استفاده کنید.

بیشتر اطلاعات دقیقدر مورد گواهی ها می توانید در http://curl.haxx.se/docs/sslcerts.html پیدا کنید.

12. سرصفحه درخواست سفارشی

ممکن است لازم باشد موارد را تغییر دهید یا اضافه کنید درخواست های فردیحلقه.

به عنوان مثال، می توانید درخواست POST را به PROPFIND تغییر دهید و داده ها را به عنوان "Content-Type: text/xml" (به جای Content-Type معمولی) ارسال کنید:

# curl -d " " -H "Content-Type: text/xml" -X PROPFIND url.com

شما می توانید عنوانی را با مشخص کردن آن بدون محتوا حذف کنید. به عنوان مثال، می‌توانید هدر "Host:" را حذف کنید و در نتیجه درخواست را خالی کنید:

# curl -H "میزبان:" http://mysite.com

شما همچنین می توانید عنوان اضافه کنید. سرور شما ممکن است به هدر "Destination:" نیاز داشته باشد:

# curl -H "مقصد: http://moo.com/nowhere" http://url.com

13. اشکال زدایی

اغلب اتفاق می افتد که یک سایت به درخواست های curl متفاوت از درخواست های مرورگر پاسخ می دهد. در این مورد، باید کرل را تا حد ممکن شبیه به مرورگر کنید:

  • از سوئیچ --trace-ascii برای ذخیره یک رکورد دقیق از کوئری ها استفاده کنید تا بتوانید آنها را با جزئیات بررسی کنید و مشکل را درک کنید.
  • مطمئن شوید که کوکی ها را بررسی کرده اید و در صورت لزوم از آنها استفاده کنید (-b را بخوانید و -c را ذخیره کنید)
  • یکی از آخرین مرورگرهای محبوب را در قسمت "user-agent" مشخص کنید
  • فیلد "ارجاع" را مانند مرورگر پر کنید
  • اگر از درخواست‌های POST استفاده می‌کنید، مطمئن شوید که همه فیلدها به همان ترتیبی که مرورگر ارسال می‌شود (نگاه کنید به نقطه 4.5 بالا)

یک کمک کننده خوب در این کار دشوار، افزونه LiveHTTPHeader برای Mozilla/Firefox است که به شما امکان می دهد تمام هدرهایی را که این مرورگر ارسال و دریافت می کند (حتی در هنگام استفاده از HTTPS) مشاهده کنید.

یک رویکرد سطح پایین‌تر این است که با استفاده از برنامه‌هایی مانند ethereal یا tcpdump، ترافیک HTTP روی شبکه را جذب کنید و سپس آن‌چه سرصفحه‌ها توسط مرورگر دریافت و ارسال شده‌اند را تجزیه و تحلیل کنید (HTTPS این رویکرد را ناکارآمد می‌کند).

خواندن RFC 2616 برای هر کسی که می خواهد پروتکل HTTP را درک کند، ضروری است.

RFC 2396 نحو URL را توضیح می دهد.

RFC 2109 نحوه عملکرد کوکی ها را تعریف می کند.

RFC 1867 فرمت ارسال فایل را مشخص می کند.

http://openssl.planetmirror.com - صفحه نخستپروژه OpenSSL

http://curl.haxx.se - صفحه اصلی پروژه cURL

زندگی یک توسعه‌دهنده وب با مشکلات تیره شده است. به ویژه زمانی که منبع این مشکلات ناشناخته است، ناخوشایند است. آیا این مشکل در ارسال درخواست است یا با پاسخ یا با کتابخانه شخص ثالث یا API خارجی باگ است؟ مجموعه ای از ابزارهای مختلف وجود دارند که می توانند زندگی ما را آسان تر کنند. در اینجا برخی از ابزارهای خط فرمان وجود دارد که من شخصا آنها را ارزشمند می دانم.

حلقه
cURL برنامه ای برای انتقال داده ها از طریق پروتکل های مختلف، مشابه wget است. تفاوت اصلی این است که به طور پیش فرض wget در یک فایل ذخیره می شود، در حالی که cURL به خط فرمان خروجی می دهد. این امر باعث می شود که مشاهده محتوای وب سایت بسیار آسان باشد. به عنوان مثال، در اینجا نحوه دریافت سریع IP خارجی فعلی خود آورده شده است:

$ curl ifconfig.me 93.96.141.93
گزینه ها -من(نمایش عناوین) و -من(فقط نمایش سرصفحه ها) cURL را به ابزاری عالی برای اشکال زدایی پاسخ های HTTP و تجزیه و تحلیل آنچه که سرور دقیقاً برای شما ارسال می کند تبدیل می کند:

$ curl -I سایت HTTP/1.1 200 OK سرور: nginx تاریخ: Thu, 18 Aug 2011 14:15:36 GMT نوع محتوا: text/html; charset=utf-8 اتصال: keep-alive Keep-alive: timeout=25
پارامتر همچنین مفید است، cURL را مجبور می کند تا به طور خودکار تغییر مسیرها را دنبال کند. cURL از احراز هویت HTTP، کوکی ها، تونل سازی پروکسی HTTP، تنظیمات دستیدر سرفصل ها و خیلی خیلی بیشتر.

محاصره
- ابزاری برای تست بار. به علاوه، گزینه مناسبی نیز دارد -g، که بسیار شبیه به حلقه – iL، اما علاوه بر آن سرصفحه درخواست http را نیز به شما نشان می دهد. در اینجا یک مثال از google.com آورده شده است (برخی عناوین برای اختصار حذف شده اند):

$ siege -g www.google.com GET / HTTP/1.1 میزبان: www.google.com User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) اتصال: بستن HTTP/1.1 302 مکان یافت شده: http:// www.google.co.uk/ نوع محتوا: text/html; charset=UTF-8 سرور: gws Content-Length: 221 اتصال: بستن GET / HTTP/1.1 میزبان: www.google.co.uk User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) اتصال: بستن HTTP/ 1.1 200 OK نوع محتوا: text/html; charset=ISO-8859-1 X-XSS-Protection: 1; mode=block اتصال: بستن
اما چیزی که Siege برای آن عالی است، تست بار است. مانند بنچمارک آپاچی ab، می تواند درخواست های موازی زیادی را به سایت ارسال کند و ببیند که چگونه ترافیک را مدیریت می کند. که در مثال زیردر اینجا نحوه آزمایش گوگل با 20 کوئری به مدت 30 ثانیه و نتیجه این است:

$ siege -c20 www.google.co.uk -b -t30s ... رفع محاصره سرور... انجام شد. تراکنش ها: 1400 بازدید در دسترس بودن: 100.00 % زمان سپری شده: 29.22 ثانیه داده های منتقل شده: 13.32 مگابایت زمان پاسخگویی: 0.41 ثانیه نرخ تراکنش: 47.91 ترانس در ثانیه خروجی: 0.46 مگابایت: 1 تراکنش سریع: 3 ثانیه 0 طولانی ترین تراکنش: 4.08 کوتاهترین معامله: 0.08
یکی از مهمترین توابع مفید Siege این است که نه تنها با یک آدرس، بلکه با لیستی از URL ها از یک فایل نیز کار می کند. این برای تست بار عالی است زیرا می توانید شبیه سازی کنید ترافیک واقعیدر سایت، به جای اینکه فقط یک URL را بارها و بارها ضربه بزنید. به عنوان مثال، در اینجا نحوه استفاده از Siege برای بارگیری سرور با استفاده از آدرس‌های گزارش آپاچی آمده است:

$ cut -d " " -f7 /var/log/apache2/access.log > urls.txt $ siege -c -b -f urls.txt
Ngrep
برای تجزیه و تحلیل جدی ترافیک، Wireshark با هزاران تنظیمات، فیلتر و پیکربندی وجود دارد. نسخه خط فرمان نیز وجود دارد توشارک. اما برای کارهای ساده، عملکرد Wireshark را اضافی می دانم. پس تا زمانی که مجبور نباشم سلاح قدرتمند، من استفاده می کنم . به شما اجازه می دهد تا با بسته های شبکههمان grepبا فایل ها انجام می دهد

برای ترافیک وب، تقریبا همیشه می خواهید از پارامتر استفاده کنید -دبلیوبرای حفظ قالب بندی رشته و همچنین گزینه -q، که اطلاعات اضافی در مورد بسته های بی همتا را پنهان می کند. در اینجا یک فرمان مثال است که تمام بسته ها را با دستور GET یا POST رهگیری می کند:

Ngrep -q -W byline "^(GET|POST) .*"
می توانید یک فیلتر اضافی برای بسته ها اضافه کنید، به عنوان مثال توسط به یک میزبان معین، آدرس IP یا پورت. در اینجا یک فیلتر برای همه چیزهای ورودی و ترافیک خروجیدر google.com، پورت 80، که حاوی کلمه "جستجو" است.

Ngrep -q -W byline "search" میزبان www.google.com و پورت 80

اغلب مجبوریم دانلود کنیم فایل های مختلفمثلا از اینترنت فایل های اجراییبرنامه ها، فایل های اسکریپت، آرشیو منبع. اما همیشه لازم نیست این کار از طریق مرورگر انجام شود. در بسیاری از موقعیت ها انجام تمام اقدامات از طریق ترمینال بسیار ساده تر است. زیرا از این طریق می توانید فرآیند را خودکار کنید. از طرف دیگر، مدیران وب‌سایت‌ها هر از گاهی باید دسترسی به وب‌سایت را آزمایش کنند، سرصفحه‌های ارسالی و دریافتی و موارد دیگر را بررسی کنند.

برای حل چنین مشکلات و مشکلاتی از محدوده مشابه، می توانید از ابزار curl استفاده کنید. این به شما امکان می دهد طیف وسیع تری از مشکلات را حل کنید، از جمله حتی شبیه سازی اقدامات کاربر در سایت. در این مقاله نحوه استفاده از curl، چیست و چرا این برنامه مورد نیاز است را بررسی خواهیم کرد.

در واقع، curl چیزی بیش از یک ابزار خط فرمان برای لینوکس یا ویندوز است. این مجموعه ای از کتابخانه هایی است که پیاده سازی می کنند قابلیت های اساسیکار با صفحات URLو انتقال فایل این کتابخانه از کار با پروتکل‌های FTP، FTPS، HTTP، HTTPS، TFTP، SCP، SFTP، Telnet، DICT، LDAP و همچنین POP3، IMAP و SMTP پشتیبانی می‌کند. برای شبیه سازی اقدامات کاربر در صفحات و سایر عملیات با URL ها عالی است.

پشتیبانی از کتابخانه curl به بسیاری از آنها اضافه شده است زبانهای مختلفبرنامه نویسی و پلتفرم ها ابزار curl یک بسته بندی مستقل برای این کتابخانه است. این ابزاری است که در این مقاله روی آن تمرکز خواهیم کرد.

دستور curl

قبل از اینکه به توضیح نحوه استفاده از دستور curl linux بپردازیم، اجازه دهید به خود ابزار و گزینه های اصلی آن که به آن نیاز داریم نگاهی بیندازیم. نحو این ابزار بسیار ساده است:

پیوند گزینه های حلقه $

حالا بیایید به گزینه های اصلی نگاه کنیم:

  • -# - نمایش یک نوار پیشرفت ساده در حین بارگذاری.
  • -0 - استفاده کنید پروتکل http 1.0;
  • -1 - از پروتکل رمزگذاری tlsv1 استفاده کنید.
  • -2 - از sslv2 استفاده کنید.
  • -3 - از sslv3 استفاده کنید.
  • -4 - از ipv4 استفاده کنید.
  • -6 - از ipv6 استفاده کنید.
  • - USER_AGENT خود را نشان دهید.
  • - ذخیره کوکی در یک فایل.
  • - ارسال کوکی به سرور از یک فایل.
  • -C- دانلود فایل را از نقطه شکست یا افست مشخص شده ادامه دهید.
  • -m - حداکثر زماندر انتظار پاسخ از سرور؛
  • - ارسال داده روش POST;
  • -دی- ذخیره هدرهای بازگشتی توسط سرور به یک فایل.
  • -e- فیلد Referer-uri را تنظیم کنید، که نشان می دهد کاربر از کدام سایت آمده است.
  • -ای- از یک گواهی SSL خارجی استفاده کنید.
  • - پیام های خطا نمایش داده نشود.
  • -اف- ارسال داده ها در قالب یک فرم؛
  • -جی- اگر این گزینه فعال باشد، تمام داده های مشخص شده در گزینه -d با استفاده از روش GET منتقل می شود.
  • -اچ- انتقال هدرها به سرور
  • -من- فقط هدر HTTP را دریافت کنید و کل محتوای صفحه را نادیده بگیرید.
  • -j- خواندن و ارسال کوکی ها از یک فایل؛
  • -جی- حذف هدر از درخواست
  • - پذیرش و پردازش تغییر مسیرها؛
  • -s - بیشترین مقدارتغییر مسیرها با استفاده از مکان.
  • -o- خروجی محتوای صفحه به یک فایل.
  • -O- ذخیره محتوا در فایلی با نام صفحه یا فایل روی سرور؛
  • - استفاده از پروکسی؛
  • -- پروتو- پروتکل مورد استفاده را مشخص کنید.
  • - صرفه جویی در زمان آخرین تغییرفایل از راه دور؛
  • -s- نمایش حداقل اطلاعات در مورد خطاها؛
  • - نمایش پیام های خطا؛
  • -تی- فایل را روی سرور آپلود کنید.
  • -v- دقیق ترین خروجی؛
  • -y - حداقل سرعتدانلودها؛
  • - حداکثر سرعت، بیشینه سرعتدانلودها؛
  • -z- فایل را فقط در صورتی دانلود کنید که دیرتر از زمان مشخص شده اصلاح شده باشد.
  • -V- نمایش نسخه

این به هیچ وجه همه گزینه‌های کرل لینوکس نیست، اما اصول اولیه‌ای را که باید استفاده کنید فهرست می‌کند.

چگونه از فر استفاده کنیم؟

ما همه چیز مربوط به تئوری کار با ابزار curl را پوشش دادیم، اکنون وقت آن است که به تمرین و نمونه هایی از دستور curl نگاه کنیم.

بیشترین وظیفه مشترک- این . دانلود فایل بسیار ساده است. برای انجام این کار، فقط نام فایل یا صفحه html را به ابزار در پارامترها ارسال کنید:

curl https://raw.githubusercontent.com/curl/curl/master/README.md

اما اینجا یک سورپرایز در انتظار شماست: کل محتویات فایل به خروجی استاندارد ارسال می شود. برای نوشتن آن در هر فایلی از:

curl -o readme.txt https://raw.githubusercontent.com/curl/curl/master/README.md

و اگر می خواهید فایل به دست آمده با نام فایل روی سرور یکسان باشد، از گزینه -O استفاده کنید:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md

curl -# -C - -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

در صورت لزوم، می توانید چندین فایل را با یک دستور دانلود کنید:

curl -O https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

چیز دیگری که ممکن است برای یک مدیر مفید باشد این است که فقط یک فایل را در صورتی بارگیری کند که اصلاح شده باشد:

curl -z 21 دسامبر-17 https://raw.githubusercontent.com/curl/curl/master/README.md -O https://raw.githubusercontent.com/curl/curl/master/README

محدودیت سرعت

با استفاده از گزینه -Y می توانید سرعت دانلود را به حد لازم محدود کنید تا شبکه بیش از حد بارگیری نشود:

curl --limit-rate 50K -O https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.11-rc7.tar.xz

در اینجا باید تعداد کیلوبایت در ثانیه قابل دانلود را مشخص کنید. همچنین اگر سرعت کافی نیست، می توانید اتصال را قطع کنید، از گزینه -Y برای انجام این کار استفاده کنید:

curl -Y 100 -O https://raw.githubusercontent.com/curl/curl/master/README.md

انتقال فایل ها

curl -T login.txt ftp://speedtest.tele2.net/upload/

یا بیایید بررسی کنیم که فایل از طریق HTTP ارسال شده است.

curl -T ~/login.txt http://posttestserver.com/post.php

در پاسخ، ابزار به شما می گوید که کجا می توانید فایل دانلود شده را پیدا کنید.

ارسال داده های POST

شما می توانید نه تنها فایل ها، بلکه هر داده ای را با استفاده از روش POST ارسال کنید. یادآوری می کنم که از این روش برای ارسال داده های اشکال مختلف استفاده می شود. برای ارسال چنین درخواستی از گزینه -d استفاده کنید. برای آزمایش از همان سرویس استفاده خواهیم کرد:

curl -d "field1=val&fileld2=val1"http://posttestserver.com/post.php

اگر از این گزینه ارسال راضی نیستید، می توانید وانمود کنید که فرم را ارسال می کنید. یک گزینه برای این -F وجود دارد:

curl -F "password=@pass;type=text/plain" http://posttestserver.com/post.php

در اینجا ما فیلد رمز عبور را با تایپ به فرم ارسال می کنیم متن ساده، به همین ترتیب می توانید چندین پارامتر را ارسال کنید.

ارسال و دریافت کوکی ها

کوکی ها توسط وب سایت ها برای ذخیره اطلاعات خاص در سمت کاربر استفاده می شوند. این ممکن است برای مثال برای احراز هویت ضروری باشد. می توانید با استفاده از curl کوکی ها را ارسال و دریافت کنید. برای ذخیره کوکی های دریافتی در یک فایل، از گزینه -c استفاده کنید:

curl -c cookie.txt http://posttestserver.com/post.php

سپس می توانید کوکی کرل را دوباره ارسال کنید:

curl -b cookie.txt http://posttestserver.com/post.php

انتقال و تجزیه و تحلیل هدر

ما همیشه لزوماً به محتوای صفحه نیاز نداریم. گاهی اوقات فقط تیترها می توانند جالب باشند. برای نمایش فقط آنها گزینه -I وجود دارد:

حلقه -I https://site

و گزینه -H به شما امکان می دهد چندین یا چند مورد را به سرور ارسال کنید، به عنوان مثال، می توانید هدر If-Modified-Since را ارسال کنید تا صفحه فقط در صورت اصلاح شده برگردانده شود:

احراز هویت حلقه ای

اگر سرور به یکی از انواع رایج احراز هویت مانند HTTP Basic یا FTP نیاز داشته باشد، curl می تواند این کار را به راحتی انجام دهد. برای مشخص کردن جزئیات احراز هویت، کافی است آن‌ها را که با یک دونقطه در گزینه -u از هم جدا شده‌اند، مشخص کنید:

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

احراز هویت در سرورهای HTTP نیز به همین ترتیب انجام خواهد شد.

با استفاده از پروکسی

اگر برای دانلود فایل ها نیاز به استفاده از سرور پروکسی دارید، این کار نیز بسیار ساده است. کافی است در گزینه -x آدرس سرور پراکسی را مشخص کنید:

curl -x proxysever.test.com:3128 http://google.co.in

نتیجه گیری

در این مقاله، نحوه استفاده از curl، چرایی نیاز به این ابزار و قابلیت های اصلی آن را بررسی کردیم. علیرغم شباهت آنها، آنها بسیار متفاوت هستند. دستور curl linux بیشتر برای تحلیل و شبیه سازی است اقدامات مختلفدر سرور، در حالی که wget برای دانلود فایل ها و خزیدن سایت ها مناسب تر است.

ج URL بسیار است ابزار مفیدخط فرمان برای انتقال داده ها از یا به سرور. Curl از پروتکل های مختلفی مانند FILE، HTTP، HTTPS، IMAP، IMAPS، LDAP، DICT، LDAPS، TELNET، FTPS، GOPHER، RTMP، RTSP، SCP، SFTP، POP3، POP3S، SMB، SMBS، SMTP، SMTPS، و TELNET پشتیبانی می کند. .

از cURL می توان به روش های مختلف استفاده کرد به روش های جالب. با استفاده از این ابزار می توانید فایل ها را دانلود، آپلود و مدیریت کنید، آدرس خود را بررسی کنید پست الکترونیک، یا حتی وضعیت خود را در برخی از وب سایت ها به روز کنید رسانه های اجتماعییا هوای بیرون را چک کنید. در این مقاله، ما به پنج مورد از کاربردی ترین و اساسی ترین کاربردهای ابزار cURL در هر کدام نگاه خواهیم کرد.

1. URL را بررسی کنید

یکی از رایج‌ترین و ساده‌ترین کاربردهای cURL، چاپ دستوری است که به دنبال آن URLی است که می‌خواهید آزمایش کنید

حلقه https://domain.ru

این دستور محتویات URL را در ترمینال شما نمایش می دهد

2. خروجی URL را در یک فایل ذخیره کنید

وب سایت Curl -o https://domain.ru % کل % دریافتی % Xferd Average زمان سرعتزمان زمان بارگذاری فعلی بارگذاری کل سرعت صرف شده باقی مانده 100 41793 0 41793 0 0 275k 0 --:--:-- --:--:-- --:--:-- 2.9M

در این مثال، خروجی در فایلی به نام «وب‌سایت» در فهرست کاری فعلی ذخیره می‌شود.

3. آپلود فایل ها با استفاده از Curl

با افزودن گزینه -o به دستور می توانید فایل ها را با استفاده از Curl دانلود کنید. برای ذخیره فایل ها استفاده می شود سرور محلیبا همان نام های موجود در سرور راه دور

Curl -O https://domain.ru/file.zip

در این مثال، بایگانی 'file.zip' در فهرست کاری فعلی دانلود می شود.

همچنین می توانید با افزودن گزینه -o به cURL یک فایل با نام دیگری آپلود کنید.

Curl -o archive.zip https://domain.ru/file.zip

بنابراین آرشیو 'file.zip' دانلود و به عنوان 'Archive.zip' ذخیره می شود.

همانطور که در مثال زیر نشان داده شده است، می توان از cURL برای دانلود همزمان چندین فایل استفاده کرد

Curl -O https://domain.ru/file.zip -O https://domain.com/file2.zip

همچنین می‌توان از Curl برای آپلود امن فایل‌ها از طریق SSH با استفاده از دستور زیر استفاده کرد

کاربر Curl -u sftp://server.domain.ru/path/to/file

لطفا توجه داشته باشید که باید از مسیر کامل فایلی که می خواهید دانلود کنید استفاده کنید

4. اطلاعات را از هدر HTTP وب سایت بگیرید

شما به راحتی می توانید اطلاعات هدر HTTP را از هر وب سایتی با افزودن گزینه -I ('i') به cURL دریافت کنید.

Curl -I http://domain.ru HTTP/1.1 200 OK تاریخ: یکشنبه، 16 اکتبر 2016 ساعت 23:37:15 GMT سرور: Apache/2.4.23 (Unix) X-Powered-By: PHP/5.6.24 اتصال : بستن محتوا-نوع: text/html; charset=UTF-8

5. دسترسی به سرور FTP

برای دسترسی به سرور FTP با استفاده از Curl، باید از دستور زیر استفاده کنید

Curl ftp://ftp.domain.ru --username:password

Curl به سرور FTP متصل می شود و همه فایل ها و دایرکتوری ها را در فهرست اصلی کاربر فهرست می کند

می توانید فایل را با استفاده از FTP دانلود کنید

Curl ftp://ftp.domain.ru/file.zip -- نام کاربری: رمز عبور

و فایل را در سرور FTP آپلود کنید

Curl -T file.zip ftp://ftp.domain.ru/ -- نام کاربری: رمز عبور

می توانید صفحه Curl را به صورت دستی بررسی کنید تا همه چیز را ببینید گزینه های موجود cURL و عملکرد آن

حلقه مرد

PS.اگر این پست را دوست داشتید، لطفا آن را با دوستان خود به اشتراک بگذارید در شبکه های اجتماعیبا استفاده از دکمه های زیر یا به سادگی نظر خود را بنویسید. متشکرم.

زندگی یک توسعه‌دهنده وب با مشکلات تیره شده است. به ویژه زمانی که منبع این مشکلات ناشناخته است، ناخوشایند است. آیا این مشکل در ارسال درخواست است یا با پاسخ یا با کتابخانه شخص ثالث یا API خارجی باگ است؟ مجموعه ای از ابزارهای مختلف وجود دارند که می توانند زندگی ما را آسان تر کنند. در اینجا برخی از ابزارهای خط فرمان وجود دارد که من شخصا آنها را ارزشمند می دانم.

حلقه
cURL برنامه ای برای انتقال داده ها از طریق پروتکل های مختلف، مشابه wget است. تفاوت اصلی این است که به طور پیش فرض wget در یک فایل ذخیره می شود، در حالی که cURL به خط فرمان خروجی می دهد. این امر باعث می شود که مشاهده محتوای وب سایت بسیار آسان باشد. به عنوان مثال، در اینجا نحوه دریافت سریع IP خارجی فعلی خود آورده شده است:

$ curl ifconfig.me 93.96.141.93
گزینه ها -من(نمایش عناوین) و -من(فقط نمایش سرصفحه ها) cURL را به ابزاری عالی برای اشکال زدایی پاسخ های HTTP و تجزیه و تحلیل آنچه که سرور دقیقاً برای شما ارسال می کند تبدیل می کند:

$ curl -I habrahabr.ru HTTP/1.1 200 OK سرور: nginx تاریخ: Thu, 18 Aug 2011 14:15:36 GMT نوع محتوا: text/html; charset=utf-8 اتصال: keep-alive Keep-alive: timeout=25
پارامتر همچنین مفید است، cURL را مجبور می کند تا به طور خودکار تغییر مسیرها را دنبال کند. cURL از احراز هویت HTTP، کوکی‌ها، تونل زدن از طریق پراکسی‌های HTTP، تنظیمات دستی در هدرها، و بسیاری موارد دیگر پشتیبانی می‌کند.

محاصره
Siege یک ابزار تست بار است. به علاوه، گزینه مناسبی نیز دارد -g، که بسیار شبیه به حلقه – iL، اما علاوه بر آن سرصفحه درخواست http را نیز به شما نشان می دهد. در اینجا یک مثال از google.com آورده شده است (برخی عناوین برای اختصار حذف شده اند):

$ siege -g www.google.com GET / HTTP/1.1 میزبان: www.google.com User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) اتصال: بستن HTTP/1.1 302 مکان یافت شده: http:// www.google.co.uk/ نوع محتوا: text/html; charset=UTF-8 سرور: gws Content-Length: 221 اتصال: بستن GET / HTTP/1.1 میزبان: www.google.co.uk User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) اتصال: بستن HTTP/ 1.1 200 OK نوع محتوا: text/html; charset=ISO-8859-1 X-XSS-Protection: 1; mode=block اتصال: بستن
اما چیزی که Siege برای آن عالی است، تست بار است. مانند بنچمارک آپاچی ab، می تواند درخواست های موازی زیادی را به سایت ارسال کند و ببیند که چگونه ترافیک را مدیریت می کند. مثال زیر نشان می دهد که چگونه گوگل را با 20 کوئری به مدت 30 ثانیه آزمایش می کنیم و سپس نتیجه را چاپ می کنیم:

$ siege -c20 www.google.co.uk -b -t30s ... رفع محاصره سرور... انجام شد. تراکنش ها: 1400 بازدید در دسترس بودن: 100.00 % زمان سپری شده: 29.22 ثانیه داده های منتقل شده: 13.32 مگابایت زمان پاسخگویی: 0.41 ثانیه نرخ تراکنش: 47.91 ترانس در ثانیه خروجی: 0.46 مگابایت: 1 تراکنش سریع: 3 ثانیه 0 طولانی ترین تراکنش: 4.08 کوتاهترین معامله: 0.08
یکی از مفیدترین ویژگی های Siege این است که می تواند نه تنها با یک آدرس، بلکه با لیستی از URL های یک فایل کار کند. این برای تست بار بسیار عالی است زیرا می‌توانید ترافیک واقعی سایت را شبیه‌سازی کنید نه اینکه بارها و بارها به یک URL مشابه ضربه بزنید. به عنوان مثال، در اینجا نحوه استفاده از Siege برای بارگیری سرور با استفاده از آدرس‌های گزارش آپاچی آمده است:

$ cut -d " " -f7 /var/log/apache2/access.log > urls.txt $ siege -c -b -f urls.txt
Ngrep
برای تجزیه و تحلیل جدی ترافیک، Wireshark با هزاران تنظیمات، فیلتر و پیکربندی وجود دارد. نسخه خط فرمان نیز وجود دارد توشارک. اما برای کارهای ساده، عملکرد Wireshark را اضافی می دانم. بنابراین، مگر اینکه به یک سلاح قدرتمند نیاز داشته باشم، از . این به شما امکان می دهد همان کار را با بسته های شبکه انجام دهید grepبا فایل ها انجام می دهد

برای ترافیک وب، تقریبا همیشه می خواهید از پارامتر استفاده کنید -دبلیوبرای حفظ قالب بندی رشته و همچنین گزینه -q، که اطلاعات اضافی در مورد بسته های بی همتا را پنهان می کند. در اینجا یک فرمان مثال است که تمام بسته ها را با دستور GET یا POST رهگیری می کند:

Ngrep -q -W byline "^(GET|POST) .*"
می توانید یک فیلتر اضافی برای بسته ها اضافه کنید، به عنوان مثال، توسط یک میزبان، آدرس IP یا پورت معین. در اینجا فیلتری برای تمام ترافیک به و از google.com، پورت 80 وجود دارد که حاوی کلمه "جستجو" است.

Ngrep -q -W byline "search" میزبان www.google.com و پورت 80

بهترین مقالات در این زمینه