Curl ، خواندن سایتهای دیگر از سایت خودتان و لوگین

saalek110

Well-Known Member

Curl ، خواندن سایتهای دیگر از سایت خودتان و لوگین​


php_curl.jpg
شما بلدید سایت بسازید ، ولی سایت شما آیا از وجود سایتهای دیگر خبر دارد؟
با curl به سایتهای دیگر دسترسی داشته باشید.
 
آخرین ویرایش:

saalek110

Well-Known Member
مطالب تاپیک جابجا گفته شده ، اول یک مرور کلی بکنید.
 
آخرین ویرایش:

saalek110

Well-Known Member
در واقع CURL یک اکستنشن پر سرعت و قوی موجود در php است که با استفاده از اون می تونیم اطلاعات رو مانند یک مرورگر بفرستیم و بگیرم , تغییرات درونش بدیم , فیلتر کنم و …. .

با استفاده از CURL میشه برنامه هایی مثل اسکنر ها و اکسپلویت ها و … بنویسیم .


 

saalek110

Well-Known Member
برنامه loginer:



مثال لوگین در یک سایت:
منبع:

PHP:
<?php
if(isset($_POST["submit"]))
{
  echo "Full name is " . $_POST["firstName"] .
     "  " . $_POST["lastName"];
  exit;
}
?>
 
<html>
<body>
 
<form method = "POST" action = "" >
  <input  name="firstName"  type="text">
  <input  name="lastName"  type="text">
  <input  type="submit"  name="submit"  value="submit" >
</form>
</body>
</html>

سالک: همان طور که می بینید در کد بالا یک فرم ساده و پاسخ به submit فرم است.

حالا باید کد curl داشته باشیم در سایت بالا لوگین کند.
PHP:
<?php
$handle = curl_init();
 
$url = "https://localhost/curl/theForm.php";
 
// آرایه ای از نام و مقدار هر فیلد برای فرم
// یادتان باشد که نام کلیدهای این آرایه باید با نام فیلدهای فرم برابر باشند
 
$postData = array(
  'firstName' => 'Amir',
  'lastName'  => 'ZM',
  'submit'    => 'ok'
);
 
curl_setopt_array($handle,
  array(
     CURLOPT_URL => $url,
     // POST جهت تنظیم درخواست روی حالت
    CURLOPT_POST       => true,
    // داده هایی که باید به همراه درخواست ارسال شود
    CURLOPT_POSTFIELDS => $postData,
    CURLOPT_RETURNTRANSFER     => true,
  )
);
 
$data = curl_exec($handle);
 
curl_close($handle);
 
echo $data;
؟>

سالک : همان طور که در بالا می بینید ، دو فایل باید بسازیم ، من هم دو فایل را روی هاست ساختم و در فایل دومی ، برای آدرسش ، این طوری نوشتم:
PHP:
 $url = "http://saalek110.com/my_form.php";

که اسم فایل فرم my_form.php بود.

حاصل اجرا همان حاصل اجرای کد قسمت submit است.
می نویسد:
کد:
Full name is Amir ZM


سالک: خودم تست کردم ، درست کار می کند.
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: شاید بهتر بود اول کد نمایش یک صفحه را بگذارم نه پر کردن یک فرم را.
در ادامه کدهای دیگر را تمرین می کنیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک : به قسمت بندی زیر توجه کنید: (از یک سایت نقل می کنم)

...... می تونم بگم که درواقع CURL3 سه بخش عمده و اصلی داره .

1 – تعریف و مقدار دهی اولیه initialize

2 – بدنه curl که شامل اپشن ها و فیلتر ها و … میشه

3 – بستن و اتمام CURL

منبع:
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: نقل از همان سایت بالا:
PHP:
$ch = curl_init();

$ch = curl_init(“http://google.com”);

دو نوع از تابع استفاده کرده. با ورودی یا بی ورودی.
 

saalek110

Well-Known Member
سالک: قسمت بعدی شامل آپشن ها است.
با تابع:
PHP:
curl_setopt(resoure,option,value)

اون resource همان متغیری است که با تابع curl_init پر شد. یعنی در اینجا $ch

کد نمونه:
PHP:
$ch = curl_init("http://google.com");
curl_setopt($ch,CURLOPT_HEADER,1);

در کد بالا با سایت گوگل اینیتیالایز کردیم و متغیر ch را در خط دوم به تابع curl_setopt دادیم.
اینجا گفتیم هدر می خواهیم.

مرحله بعد اجراست:

PHP:
curl_exec(resource)

کلش این طوری میشه: 3 مرحله اینیتیالایز و آپشن دهی و اجرا

PHP:
$ch = curl_init("http://google.com");
curl_setopt($ch,CURLOPT_HEADER,1);
$result = curl_exec($ch);
 
آخرین ویرایش:

saalek110

Well-Known Member
پس در پست قبل ۳ مرحله
اینیتیالایز
آپشن دهی
و اجرا
( شلیک )

را دیدم.

سالک : حالا اون سایت مرحله اخر را
close گفته بود ، ولی من مرحله آخر را اجرا گفتم.
به نظر من اجرا مثل شلیک توپ است و اختتام(close) مثل بردن توپ به انبار. به نظرم شلیک مهم تر است تا close.
مثال توپ را می زنم تا تصورم منتقل شود ، یعنی اینیتیالایز و آپشن دهی برای آماده کردن توپ برای شلیک است که
curl_exec شلیک می کنه.


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

saalek110

Well-Known Member
سالک : کد کامل قابل اجرا میشه این:
PHP:
<?php

$ch = curl_init("http://google.com");
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$result = curl_exec($ch);
curl_close($ch);


echo $result;
?>

سالک: پستهای قبلی را شرح کد این پست در نظر بگیرید.

نتیجه اجرا مثلا میشه این:
کد:
1HTTP/1.1 200 OK Date: Sun, 02 Aug 2015 08:47:45 GMT Server: Apache X-Powered-By: PHP/5.3.29 Cache-Control: private Pragma: private Set-Cookie: bb_lastvisit=1438505265; expires=Mon, 01-Aug-2016 08:47:45 GMT; path=/cc/ Set-Cookie: bb_lastactivity=0; expires=Mon, 01-Aug-2016 08:47:45 GMT; path=/cc/ Connection: close Content-Type: text/html; charset=UTF-8

سالک : سایت ایرانی که دارم ازش نقل می کنم میگه این هدر یک سایت است.

سالک : پس اسکلت یک برنامه curl را در بالا کمی شرح دادیم.
فکر کنم دیگه اسکلت کل را شرح ندهیم و برویم روی آپشن ها کار کنیم.

یک نکته دیگر از سایت فوق: تفاوت سایتهای http و https
برای اجرای سایت های دارای https:// باید از ۲ آپشن CURLOPT_SSL_VERIFYPEER و CURLOPT_SSL_VERIFYHOST کمک بگیریم.

در انتها تشکر می کنم از نویسنده سایت:

سایت کدرلایف coderlife . اسم سایتش هم قشنگه. امیدوارم موفق باشید.
 
آخرین ویرایش:

saalek110

Well-Known Member
سالک: از سایت فوق اسکلت یک برنامه curl را گفتم ولی شاید نباید هدر را اول کار می کردیم.
خوب من با سرچ در گوگل منابع را پیدا می کنم و از سایت مشخصی استفاده نمی کنم و یک مقدار جابجا داره مطلب ارائه میشه ، پس خودتان باید ترتیب آموزش را در ذهن خود مرتب کنید.
 

saalek110

Well-Known Member
از سایت roxo کد زیر را ببینید:


PHP:
<?php
$ch = curl_init();
 
 $url = "https://www.example.com";
 
 curl_setopt($ch, CURLOPT_URL, $url);
 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 
   $output = curl_exec($ch);
 
    curl_close($ch);
 
     echo $output;
     ?>


اینجا دیگه برخلاف برنامه قبلی گرفتن هدر نیست و چاپ خود سایت است.
سالک: ولی اسکلت برنامه همان است.

با تشکر از سایت roxo. روکسو در ادامه برنامه دانلود یک فایل را گفته و سپس برنامه لوگین را. برنامه لوگین همین برنامه اول این تاپیک است.
منبع انگلیسی روکسو هم اینه:
اگر دوست دارید سایت اصلی را ببینید بروید اونجا.
 
آخرین ویرایش:

saalek110

Well-Known Member


سالک: یک مقدار مطالب پس و پیش تا اینجا عرضه شد.
کد پست قبل باید اولین برنامه تاپیک باشه که یک سایت را چاپ می کنه.
 

saalek110

Well-Known Member
خلاصه تاپیک تا اینجا
هدر و خود سایت را دریافت کردیم

در یک سایت لوگین کردیم.
 

saalek110

Well-Known Member
لوگین ساده را دیدیم ولی اگر سایت کپچا داشت چی؟

در بحث زیر:
Get captcha using Curl and send data and grab results

جناب TotPeRo کدی گذاشته برای حل کپچا.

سالک: من کد را تست نکردم ، فقط فعلا این لینک را اینجا پست کردم تا گم نشود تا بعدا تست کنم.

ایشون می فرماید حواستون باشه که url فرم با url صفحه فرق داره.
 
آخرین ویرایش:

saalek110

Well-Known Member
با این سرعت پایین اینترنت و شاید بهتر باشه لوکال کار کنیم.
یعنی کدها را روی کامپیوتر خود اجرا کنیم و سایت ها را بخوانیم. این طوری وقت برای آپلود کد صرف نمیشه. البته هنوز تست نکردم. دارم ابزار کار لوکال را آماده می کنم.
 

saalek110

Well-Known Member
در سایت علی حسین ، میگه با کدهای زیر هم میشه محتوای سایتها را دریافت کرد :
PHP:
$content = file_get_contents("http://www.nettuts.com");

// یا

$lines = file("http://www.nettuts.com");

// یا

readfile("http://www.nettuts.com");
و میگه ولی انعطاف پذیری curl را نداره.


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

بعدش علی حسین گفته:
مسئله دیگر اینکه بعضی وقت ها شما لازم دارین که علاوه بر بازیابی محتوای یک صفحه , از cookies ها استفاده کنید یا لازم باشد اطلاعاتی به فرمی post کنید یا عملیات authentication انجام دهید و .. که همه این کارها با Curl امکان پذیر است .

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

saalek110

Well-Known Member

یک فیلم فارسی ، ۲۰ دقیقه
طرز فعال کردن curl را گفته. گفته اگر توابع curl اجرا نمیشه غیرفعال است.
در ویندوز خود ، روی ایکون برنامه wamp کلیک کنید بروید به پوشه php و سپس
فایل php.ini را بار کنید ، از منوی دومی جستجو را بیابید و curl را جستجو کنید و از اول خط سمی کلون را حذف کنید تا curl فعال شود. و در آخر از منوی اول ذخیره را بزنید. و wamp را ریست کنید.

اگر curl غیرفعال بشه میگه
Call to undefined function

در باقی فیلم یک برنامه curl نوشته .که نقل نمی کنم.
 
آخرین ویرایش:

saalek110

Well-Known Member
برای استفاده از تابع cURL در php ، حتما باید کتابخانه libcurl از قبل نصب شده باشد. اگر از هرکدام از پکیج هایی مثل XAMPP ، wamp ، easyphp برای نصب محیط , mysql apache ، php استفاده کرده باشید ، پس می توانید مطمئن باشید که این کتابخانه از قبل نصب شده است.

همچنین همه سرور ها امروزه این پکیج را نصب دارند و با خیال راحت می توانید آموزش cURL در php را دنبال کنید.


بعد از نصب cURL ، باید این extention را در فایل پیکربندی (php.ini) فعال کنید که برای لوکال هاست یا سرور اشتراکی شما نیاز به این تنظیمات نیست.(سالک: در پست قبل گفتیم چطور فعال کنید.)




به نقل از:
 

جدیدترین ارسال ها

بالا