ارسال پارامتر به URL و دریافت مقادیر با PHP

زمانی که از ارسال پارامتر در وب صحبت می کنیم، بیشتر ذهنمان معطوف به فرم های HTML و متد POST یا GET می شود، البته این شیوه مرسوم و پرکاربردی برای ارسال داده ها از مرورگر (سمت کاربر) به یک سایت (سمت سرور) است، اما گاهی مواقع نیاز است که از این قالب سنتی پا را فراتر بنهیم و از روش های دیگری نیز استفاده کنیم، به فرض از همین استاندارد POST و GET در ارسال درخواست های آژاکسی (Ajax) نیز به سرور استفاده می شود، از طرفی کدها و توابعی در PHP وجود دارد که می توانند علاوه بر ارسال پارامترها به یک سرور (آدرس URL)، پاسخ آن را نیز دریافت کنند، امکان بالقوه ای که می تواند کاربردهای زیادی داشته باشد، از جمله مهمترین این توابع file_get_contents و cURL هستند که در ادامه آموزش به آنها خواهیم پرداخت.
تابع file_get_contents
از تابع file_get_contents در PHP برای خواند اطلاعات یک فایل یا آدرس URL استفاده می شود، به عنوان مثال:
<?php
$homepage = file_get_contents('https://webgoo.ir/');
echo $homepage;
?>
کد بالا با ارسال یک درخواست به آدرس تعیین شده، پاسخ سرور (که صفحه اول سایت «وبگو» است) را به صورت رشته متنی دریافت می کند، اکنون اگر با دستور echo از متغیر فرضی homepage خروجی بگیریم، اطلاعات دریافت شده نمایش داده می شوند.تابع file_get_contents پنج آرگومان به شرح زیر می پذیرد:
- آرگومان اول (filename): نام (یا آدرس) فایل یا URL.
- آرگومان دوم (use_include_path): فراخوانی فایل از دایرکتوری include_path در تنظیمات PHP.
- آرگومان سوم (context): محتوایی که به همراه درخواست ارسال می شود، این محتوا باید توسط تابع stream_context_create (و بر اساس استانداردهای HTTP context options) ساخته شود تا معتبر باشد، تنظیمات قابل اعمال در این قسمت عبارتند از: method، header، user_agent، content، proxy، request_fulluri، follow_location، max_redirects، protocol_version، timeout و ignore_errors؛ اطلاعات بیشتر:
http://php.net/manual/en/context.http.php
- آرگومان چهارم (offset): محل و خط شروع خواندن اطلاعات (این قابلیت به دلیل پشتیبانی نشدن برای فایل های لوکال و محدودیت هایش، چندان کاربردی نیست).- آرگومان پنجم (maxlen): حداکثر کاراکتری که تابع خواهد خواند (در حالت پیش فرض تمام اطلاعات خوانده می شود).
تابع file_get_contents و متد POST
تابع file_get_contents علاوه بر دریافت پاسخ یک سرور، این توانایی را دارد که در چاچوب متد POST پارامترهایی نیز به سرور مقصد ارسال نماید، همان طور که در توضیح آرگومان های آن گفته شد، این پارامترها باید در چارچوب استاندارد HTTP بوده و پیش از ارسال توسط تابع stream_context_create معتبر شوند، به این ترتیب می توان نحوه کار فرم های HTML را به راحتی شبیه سازی کرد، ضمن اینکه علاوه بر ارسال پارامترها، می توان هم زمان نتیجه درخواست را نیز دریافت کرد، به مثال زیر توجه کنید.
<?php
//مقادیری که باید ارسال شوند
$data = http_build_query(
array(
'var_1' => 'content_1',
'var_2' => 'content_2',
'var_3' => 'content_3'
)
);
//تنظیم سربرگ های http
$http = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $data
)
);
//معتبر سازی با stream_context_create
$context = stream_context_create($http);
//ارسال درخواست و دریافت نتیجه
$result = file_get_contents('http://www.example.com/submit/get.php', FALSE, $context);
?>
نکته: برای نمایش نتیجه دریافتی می توانید از یک دستور ساده echo استفاده کرده و از متغیر result خروجی بگیرید.تابع cURL
یکی از قدرتمند ترین کتابخانه های مربوط به کار با پروتکل های وب در PHP، کتابخانه libcurl است که از نسخه 4.0.2 به آن افزوده شده است، البته این کتابخه به صورت پیش فرض در مفسر PHP وجود ندارد، اما به جهت کاربردی بودن، معمولا در اکثر سرورها به صورت پیش فرض فعال است، به طور ساده کتابخانه libcurl دربرگیرنده مجموعه توابعی است که کار با پروتکل های وب (از جمله HTTPS، HTTP، FTP و...) را به صورت حرفه ای و با قابلیت های زیاد ممکن می کند، به مثال زیر توجه کنید.
<?php
$content = 'PHP cURL';
$curl = curl_init('http://www.example.com/submit/get.php');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'var='.$content);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, FALSE);
$result = curl_exec($curl);
curl_close($curl);
?>
همان طور که در مثال بالا مشخص است، توابع مربوط به این کتابخانه با پیشوند _curl شروع می شوند، اما توضیح مختصری درباره برخی توابع این کتابخانه:- تابع curl_init: با دریافت یک آدرس url، نشست cURL را آغاز می کند.
- تابع curl_setopt: تنظیم پارامترهای مورد نیاز برای اجرای صحیح یک نشست cURL.
- تابع curl_exec: اجرای یک نشست cURL.
- تابع curl_close: پایان یک نشست cURL.
- تابع curl_error: آخرین خطای رخ داده در نشست را نمایش می دهد.
- تابع curl_errno: شماره خطای برگردانده شده را نمایش می دهد.
البته توابع مربوط به این کتابخانه محدود به موارد گفته شده نمی شود:
http://www.php.net/manual/en/book.curl.php
به مثالی کاربردی توجه کنید.<?php
//تنظیم آدرس url
$curl = curl_init('http://www.example.com/submit/get.php');
//تنظیم ارسال از طریق متد POST
curl_setopt($curl, CURLOPT_POST, 1);
//تنظیم پارامترها
curl_setopt($curl, CURLOPT_POSTFIELDS, 'var_1=content_1&var_2=content_2&var_3=content_3');
//تعین اینکه پاسخ سرور دریافت شود یا خیر
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
//اجرای نشست
$result = curl_exec($curl);
//پایان نشست
curl_close($curl);
?>
توضیح:- آدرس url مقصد را در قسمت curl_init مشخص کنید.
- در تنظیمات مربوط به CURLOPT_POST، متد استفاده شده در درخواست را مشخص می کنیم، اگر مقدار 1 یا TRUE باشد، مقادیر CURLOPT_POSTFIELDS از طریق متد POST ارسال شده و پارامترهای احتمالی در آدرس URL نادیده گرفته می شوند (امکان ترکیب متد POST و GET در این حالت وجود ندارد).
- در تنظیمات قسمت CURLOPT_POSTFIELDS، پارامترها و مقادیر آنها را تعیین کنید، این پارامترها در واقع نقش نام فیلد و مقادیر آنها نقش مقدار فیلد را در یک فرم HTML بازی می کنند.
- در قسمت CURLOPT_RETURNTRANSFER، مشخص می کنیم که آیا پاسخ سرور نیز پس از ارسال درخواست دریافت شود یا خیر، اگر مقدار TRUE باشد، پاسخ به صورت رشته متنی دریافت می شود و اگر FALSE باشد، پاسخ دریافت نمی شود.
- برای تکمیل یک نشست cURL باید حتما با تابع curl_exec آن را اجرا کنیم.
- در نهایت نیز با تابع curl_close، نشست cURL را خاتمه می دهیم.
نکته: برای نمایش نتیجه دریافتی می توانید از یک دستور ساده echo استفاده کرده و از متغیر result خروجی بگیرید.
دسته بندی: آموزش کاربردی » PHP
برچسب ها: PHP

نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
ارسال ایمیل با PHP و کلاس PHPMailer
نمایش قسمتی از متن و پاراگراف با PHP
دریافت و نمایش پیج رنک گوگل با PHP
ساخت منوی هوشمند با PHP و CSS
دیدگاه


علی
۱۶:۴۲ ۱۴۰۰/۰۵/۲۵
با سلام عالی بود
من یه فانکشن در فایل فانکشن دارم مثلا
با سپاس...
من یه فانکشن در فایل فانکشن دارم مثلا
function test()
{
.
.
}
و می خوام در زمان مشخص از طریق جاب کرون اجرا بشه چطور در جاب کرون فانکشن ;()test را صدا بزنم که اجرا بشه؟با سپاس...
در Cron Jobs می توانید فایل function.php را در فواصل زمانی خاص فراخوانی و در نتیجه تابع test را اجرا کنید به فرض:
/usr/local/bin/php /home/public_html/path/to/function.php >/dev/null 2>&1
آدرس دهی باید مطابق با تنظیمات هاستتان باشد که معمولا اطلاعات اولیه در قسمت Cron Jobs مشخص است.۰۲:۱۹ ۱۴۰۰/۰۵/۰۷
سلام ببینید مثالا این ادرس ادرس یک پست است
مثلا title = test نمایش بده test رو یه چیز مثل api میشه
https://www.kelidestan.com/keys/keys.php?key=439s
برای مثال key=439s برابر با متن سلام است خب من الان یک سایت دیگه دارم میخوام این مقدار رو دریافت کنم یعنی key رو از این ادرس استخراج کنم مثالا ادرس یک پست example.com/post.php?name=test1&title=test
میخوام name, title رو دریافت کنم فقط متن های name, title مثلا title = test نمایش بده test رو یه چیز مثل api میشه
هدفتان دقیقا مربوط به متد GET می شود، توضیحاتتان هم منطبق بر همین متد است، مشکل کجاست؟ در فایل post.php کد زیر را داشته باشید:
<?php
@$name = $_GET['name'];
@$title = $_GET['title'];
echo $name . ' - ' . $title;
?>
با فراخوانی آدرس مقادیر از URL دریافت و چاپ می شوند.۲۰:۵۸ ۱۴۰۰/۰۵/۰۶
سلام من میخوام در php از ادرس مثالا
یعنی من یه فایل دارم توی لوکال هاست و میخوام مقدار name,id رو توی این آدرس
x.con/posts.php$name=test&id=45
مقدار name و id رو دریافت کنم یه چیزی تو مایه های Api میشه یعنی من یه فایل دارم توی لوکال هاست و میخوام مقدار name,id رو توی این آدرس
x.con/posts.php$name=test&id=45
دریافت کنمبه نظر آدرس URL اشکال تایپی دارد؟ کاراکتر $ در آدرس صحیح است؟ معمولا باید علامت ? در آدرس های داینامیک استفاده شود و با متد GET می توانیم پارامترها را دریافت کنیم:
<?php
@$name = $_GET['name'];
@$id = $_GET['id'];
echo $name . ' - ' . $id;
?>
اگر آدرس با $ است باید از URL Rewrite در htaccess استفاده کنیم.محمد
۲۰:۴۴ ۱۴۰۰/۰۴/۲۷
سلام خیلی خیلی ممنون تشکر
محمد
۱۰:۴۸ ۱۴۰۰/۰۴/۲۷
سلام ببخشید من با curl میخواستم فایلی رو با api بفرستم ولی جواب نداد اگر امکانش هست تصحیحش کنید:
<form action="" method="post">
<input type="text" name="tk" placeholder="tk">
<input type="text" name="ch" placeholder="ch">
<input type="submit">
</form>
<?php
$token = $_POST['tk'];
$chat_id = $_POST['ch'];
$title = 'send file by api';
$file_url='/upload/1.png';
$caption='توضیح';
$request = curl_init('https://eitaayar.ir/api/'.$token.'/sendFile');
// send a file
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt(
$request, CURLOPT_POSTFIELDS,
array(
'chat_id' => $chat_id,
'title' => $title,
'file' => fopen($file_url,'rb'),
'caption' => $caption,
'date' => time(), // send next second
));
// output the response
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
// close the session
curl_close($request);
ظاهرا API نیاز به رمز (token) دارد، در صورت تمایل مقدار یک token معتبر موقت را به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا بررسی گردد.
به روزرسانی:
قسمت مربوط به آدرس فایل را به صورت Full Path در نظر بگیرید، همچنین از curl_file_create برای آماده سازی فایل جهت آپلود استفاده کنید، تکمیل شده کد:
به روزرسانی:
قسمت مربوط به آدرس فایل را به صورت Full Path در نظر بگیرید، همچنین از curl_file_create برای آماده سازی فایل جهت آپلود استفاده کنید، تکمیل شده کد:
<?php
$token = $_POST['tk'];
$chat_id = $_POST['ch'];
$title = 'send file by api';
$file_url = __DIR__ . '\upload\1.png';
$caption = 'توضیح';
$request = curl_init('https://eitaayar.ir/api/' . $token . '/sendFile');
//PHP 5.5+
if(function_exists('curl_file_create')) {
$file_url = curl_file_create($file_url);
} else {
$file_url = '@' . realpath($file_url);
curl_setopt($request, CURLOPT_SAFE_UPLOAD, false);
}
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, array(
'chat_id' => $chat_id,
'title' => $title,
'file' => $file_url,
'caption' => $caption,
'date' => time(), // send next second
));
curl_setopt($request, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
curl_close($request);
?>
احمد
۱۹:۲۳ ۱۴۰۰/۰۴/۱۴
سلام خسته نباشید من یه کد نوشتم که قیمت کالا ها و نام کالا ها رو از یه صفحه برام استخراج کنه و بصورت جدول نشون بده, ولی ارور
Warning: Array to string conversion in L:\xamps\htdocs\p.php on line 4
Array
کدی هم که نوشتم اینه!<?php
function make_price_table() {
$url = 'https://www.tgju.org/crypto/';
$content = file_get_contents($url);
$currencies =($preg_match("/<div class=\"$currency\"[^>]*>(.*?)<\/div>/ims", $content, $match));
echo "<table>
<thead>
<tr>
<th>نام</th>
<th>قیمت ریالی</th>
</tr>
</thead>
<tbody>";
foreach ($currencies as $currency){
echo "<tr>
<td>{$currency["kala-title"]}<td>
<td>{$currency["p-rial"]}</td>
</tr>";
}
echo '</tbody>
</table>';
}
make_price_table()
?>
ممنون میشم بگید مشکلش از کجاستآدرس URL درج شده در کد خطای 404 می دهد، احتمالا این آدرس مد نظر است:
https://www.tgju.org/crypto-exchanges
متغیر currency در تابع نامشخص است و به همین جهت امکان تست و خطایابی وجود ندارد!شریفی
۱۸:۲۷ ۱۴۰۰/۰۱/۲۵
استاد خیلی ممنون و سپاسگزارم.
توضیحات کامل و فوق العاده بود . ممنون.
توضیحات کامل و فوق العاده بود . ممنون.
شریفی
۱۵:۴۵ ۱۴۰۰/۰۱/۲۵
سلام مجدد.
من یه سوال خیلی تخصصی دارم. ممنون میشم پاسخ بدین. برای پروژه پایان نامه. دارم روی موتورهای جستجوگر تحقیق میکنم.
فرض کنیم به جدول داریم با حدود ۲۰۰ هزار رکورد که در هر رکورد یه لینک مجزا، مربوط به سایت های مختلف وجود داره. یه کرون جاب هم داریم که هر ۵ دقیقه اجرا میشه. در هر اجرا ۱۰۰ رکورد با دستور while فراخوانی میشه.ذدر هر فراخوانی باید به لینک سر بزنیم و فلان مورد رو از سایت مبدا استخراج کنیم و در دیتابیس ذخیره کنیم.
من از تابع file_get_contents استفاده کردم و بعدش اطلاعات رو تحلیل میکنم. این فرایند کرون جاب به صورت نامحدود در حال اجرا هست. حالا گاهی از اوقات file_get_contents به دلیل سرور ضعیف سایت مبدا خیلی دیر جواب میده و مشکل به وجود میاد. خواستم ببینم راهی برای افزایش سرعت هست؟
از طرف دیگه برام جالب شده ، هر وقت کرون جاب اجرا میشه، دیگه پروژه من بالا نمیاد و همش لودینگ میزنه. بعد که کرونجاب تموم شد، پروژه من خیلی سریع لود میشه، این ضعف سرور منه؟ که نمیتونه دو تا دستور همزمان اجرا کنه یا مشکل جای دیگه ای هست؟
من یه سوال خیلی تخصصی دارم. ممنون میشم پاسخ بدین. برای پروژه پایان نامه. دارم روی موتورهای جستجوگر تحقیق میکنم.
فرض کنیم به جدول داریم با حدود ۲۰۰ هزار رکورد که در هر رکورد یه لینک مجزا، مربوط به سایت های مختلف وجود داره. یه کرون جاب هم داریم که هر ۵ دقیقه اجرا میشه. در هر اجرا ۱۰۰ رکورد با دستور while فراخوانی میشه.ذدر هر فراخوانی باید به لینک سر بزنیم و فلان مورد رو از سایت مبدا استخراج کنیم و در دیتابیس ذخیره کنیم.
من از تابع file_get_contents استفاده کردم و بعدش اطلاعات رو تحلیل میکنم. این فرایند کرون جاب به صورت نامحدود در حال اجرا هست. حالا گاهی از اوقات file_get_contents به دلیل سرور ضعیف سایت مبدا خیلی دیر جواب میده و مشکل به وجود میاد. خواستم ببینم راهی برای افزایش سرعت هست؟
از طرف دیگه برام جالب شده ، هر وقت کرون جاب اجرا میشه، دیگه پروژه من بالا نمیاد و همش لودینگ میزنه. بعد که کرونجاب تموم شد، پروژه من خیلی سریع لود میشه، این ضعف سرور منه؟ که نمیتونه دو تا دستور همزمان اجرا کنه یا مشکل جای دیگه ای هست؟
در مورد بخش اول سوال در یادداشت قبل توضیح داده شد، اما در خصوص وجود مشکل لودینگ در زمان اجرای Cron Jobs به احتمال قوی تمام پردازش های همزمان مجاز مربوط به حساب شما در سرور مربوطه در حال استفاده است و تا زمانی که این پردازش ها خاتمه پیدا نکند مرورگر در حالت انتظار باقی می ماند، در برنامه های مدیریت هاست مانند cPanel قسمت Entry Processes هم ممکن است در اینگونه مواقع پردازش های همزمان را نمایش دهد (به فرض حداکثر 20 مورد)، در کل بحث عدم تناسب منابع سرور با میزان پردازش های در حال اجرا مطرح است.
نکته: ممکن است با تقویت سرور این مشکل کمتر احساس شود اما در نظر داشته باشید که برخی پردازش ها می توانند نیاز به ابرسرورهای خیلی قدرتمند داشته باشند و به فرض صرف تغییر سرور اشتراکی به اختصاصی مسئله را آنطور که باید رفع نکند (پیش از هزینه احتمالی در این مورد اطمینان حاصل کنید).
نکته: ممکن است با تقویت سرور این مشکل کمتر احساس شود اما در نظر داشته باشید که برخی پردازش ها می توانند نیاز به ابرسرورهای خیلی قدرتمند داشته باشند و به فرض صرف تغییر سرور اشتراکی به اختصاصی مسئله را آنطور که باید رفع نکند (پیش از هزینه احتمالی در این مورد اطمینان حاصل کنید).
شریفی
۱۵:۳۲ ۱۴۰۰/۰۱/۲۵
سلام استاد.
من از متد file_get_contents استفاده می کنم برای دریافت اطلاعات از سایت های مختلف. بعضی وقتها سایت ها دیر لود میشه. آیا قابلیتی هست که برای file_get_contents مدت زمان پردازش مشخص کنیم؟ مثلا 2 ثانیه زمان برای file_get_contents در نظر بگیریم. اگر اطلاعات دریافت نشد. خطا بده و دیگه منتظر نباشه تا اطلاعات سایت لود بشه.
ممنون میشم راهنمایی کنید.
سوال دوم :
من دارم از یه حلقه فرضا 100 دوری استفاده می کنم و file_get_contents رو در هر دور فراخوانی می کنم تا فلان اطلاعات رو برام بگیره. حالا راهی هست که بشه سرعت رو افزایش داد؟ من همین تعیین مدت زمان رسید به ذهنم. در کل cURL سریعتر هست یا file_get_contents
ممنونم.
من از متد file_get_contents استفاده می کنم برای دریافت اطلاعات از سایت های مختلف. بعضی وقتها سایت ها دیر لود میشه. آیا قابلیتی هست که برای file_get_contents مدت زمان پردازش مشخص کنیم؟ مثلا 2 ثانیه زمان برای file_get_contents در نظر بگیریم. اگر اطلاعات دریافت نشد. خطا بده و دیگه منتظر نباشه تا اطلاعات سایت لود بشه.
ممنون میشم راهنمایی کنید.
سوال دوم :
من دارم از یه حلقه فرضا 100 دوری استفاده می کنم و file_get_contents رو در هر دور فراخوانی می کنم تا فلان اطلاعات رو برام بگیره. حالا راهی هست که بشه سرعت رو افزایش داد؟ من همین تعیین مدت زمان رسید به ذهنم. در کل cURL سریعتر هست یا file_get_contents
ممنونم.
برای در نظر گرفتن Timeout تابع file_get_contents محدودیت دارد و به اندازه curl مناسب نیست، در هر صورت با stream_context_create می توانیم در آرگیومنت سوم برای file_get_contents محدودیت زمانی در برقراری اولین اتصال با سرور لحاظ کنیم (برای برخی مواقع مانند کیفیت پائین اتصال اینترنت ممکن است به درستی عمل نکند):
در مورد سوال دوم در شرایط یکسان معمولا curl سرعت بیشتری دارد هرچند آنقدر محسوس نیست که بخواهیم بحث اصلی یعنی طراحی مناسب الگوریتم و قدرت سخت افزاری سرور را نادیده بگیریم، در واقع چه curl و چه file_get_contents نیاز به یک الگوریتم مناسب و سخت افزار قوی دارند که به درستی درخواست ها را تقسیم و در زمان مناسبی با سرعت اجرا کنند، در دورهای بالا هر تابعی هم که استفاده کنیم مشکل سرعت ممکن است وجود داشته باشد مخصوصا در این مورد که منبع خارج از سرور قرار دارد، باید با توجه به قدرت سخت افزار تا جایی که می شود درخواست های پشت سر هم را مدیریت کنیم، ایندکس زمان بندی شده به فرض هر 100 مورد در 24 ساعت می تواند یک گزینه باشد، البته این اعداد را باید در برنامه دید که جوابگو است یا باید کم و زیاد شود.
file_get_contents("http://example.com", 0, stream_context_create(["http"=>["timeout"=>2]]));
اما curl امکانات از پیش تعریف شده ای برای این منظور دارد و به نظر برای هدف شما مناسبتر است:$url = "http://example.com";
$ch = curl_init();
$timeout = 2;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
اعداد برای قسمت Timeout به ثانیه هستند.در مورد سوال دوم در شرایط یکسان معمولا curl سرعت بیشتری دارد هرچند آنقدر محسوس نیست که بخواهیم بحث اصلی یعنی طراحی مناسب الگوریتم و قدرت سخت افزاری سرور را نادیده بگیریم، در واقع چه curl و چه file_get_contents نیاز به یک الگوریتم مناسب و سخت افزار قوی دارند که به درستی درخواست ها را تقسیم و در زمان مناسبی با سرعت اجرا کنند، در دورهای بالا هر تابعی هم که استفاده کنیم مشکل سرعت ممکن است وجود داشته باشد مخصوصا در این مورد که منبع خارج از سرور قرار دارد، باید با توجه به قدرت سخت افزار تا جایی که می شود درخواست های پشت سر هم را مدیریت کنیم، ایندکس زمان بندی شده به فرض هر 100 مورد در 24 ساعت می تواند یک گزینه باشد، البته این اعداد را باید در برنامه دید که جوابگو است یا باید کم و زیاد شود.
Reza
۱۵:۱۲ ۱۳۹۹/۱۲/۱۳
من htaccess روی لوکال هاست برای ساخت url تغییر دادم اما حالا با دستور get نمی تونم متود ارسالی رو بگیرم چکار کنم؟
لطفا یک نمونه از دستورات فایل htaccess را درج کنید، احتمالا مشکلی در دستورات وجود دارد که دوباره نویسی آدرس ها به درستی صورت نمی گیرد، در صورتی که ایراد مشخصی در دستورات وجود نداشته باشد صرفا از طریق برنامه Teamviewer می توان مشکل را آنلاین بررسی و راهنمایی کرد.
علی
۰۴:۴۵ ۱۳۹۹/۱۱/۰۴
با سلام سایت هایی من میخوام اطلاعاتی از سایتی بگیرم اما این سایت پس از چند ثانیه این اطلاعات رو به من نشون میده و در نتیجه وقتی از curl استفاده میکنم تنها صفحه ی فاقد اطلاعات (درحال بارگیری) رو دریافت میکنم و نمی تونم اون اطلاعات رو بگیرم راه حل این مشکل چیه؟
برای مثال سایت اینستاگرام رو هم با curl بخواییم ازش اطلاعات بگیریم تنها کدهای ابتدایی و درحال بارگیری اون رو میتونیم بگیریم
ممنون میشم راهنمایی کنید
برای مثال سایت اینستاگرام رو هم با curl بخواییم ازش اطلاعات بگیریم تنها کدهای ابتدایی و درحال بارگیری اون رو میتونیم بگیریم
ممنون میشم راهنمایی کنید
برای سایت های مبتنی بر جاوا اسکریپت باید رفتار مرورگر را شبیه سازی کنیم یعنی صرف ارسال درخواست ساده از URL کافی نیست باید ببینیم چه منابعی در برنامه از سرور درخواست (Request) و چه پاسخی (Response) دریافت می شود، برای این کار می توانیم از ابزار وبمستر مرورگر (معمولا با زدن دکمه F12 در دسترس است) lستفاده کنیم، واقعیت مطلب این است در این حالت کار کمی پیچیده و سخت است و باید تمام تنظیمات برای شبیه سازی رفتار مرورگر با cURL انجام شود و برنامه مد نظر هم می تواند روش های مختلفی برای اعتبارسنجی درخواست ها از سرور انجام دهد.
amin
۰۰:۴۴ ۱۳۹۹/۰۶/۲۵
سلام و خسته نباشید
می خواستم Slash ( / ) رو به صورت اتوماتیک از تمامی URL ها حذف کنم البته با کمک htaccess ممنون میشم راهنمای کنید . بسیار بسیار تشکر
می خواستم Slash ( / ) رو به صورت اتوماتیک از تمامی URL ها حذف کنم البته با کمک htaccess ممنون میشم راهنمای کنید . بسیار بسیار تشکر
برای حذف خودکار اسلش از انتهای آدرس های URL و ریدایرکت به آدرس بدون اسلش ابتدا بهتر است در خروجی HTML صفحه تمام لینک ها بدون اسلش باشند، سپس با دستور ریدایرکت زیر می توانیم این کار را به صورت خودکار انجام دهیم:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R,L]
نکته مهم: Flag استفاده شده در این دستور R است که به معنی انتقال موقت می باشد، این کار جهت تست و اطمینان از عملکرد صحیح تمام آدرس های سایت در نظر گرفته شده، پس از انجام تست توصیه می شود از R=301 و انتقال همیشگی استفاده شود، تنظیمات R=301 در حافظه مرورگر باقی می ماند و در صورت اشتباه و نیاز به اصلاح باید حافظه Cache مرورگر پاک شود لذا برای تست مناسب نیست.جواد
۲۲:۰۳ ۱۳۹۹/۰۲/۲۳
سلام. مقادیر و اطلاعاتی از یک سایت دیگه با همین متد file get contents میگیرم که روی لوکال هاست سرعتش خوبه، روی سرور هم بد نبود ولی خیلی وحشتناک کند شد! هر سایتی هم سر میزنم جواب درستی نمی گیرم. دانلود صفحات سایت مورد نظر یا باز شدنش با مرورگر خیلی سریع هست. مگه مرورگر با چه سیستمی به سرور دسترسی پیدا میکنه؟ اگر سایت یا سرور مقابل کنده پس چرا هیچ جای دیگه اثری از کندی نداره
احتمالا سایت مورد نظر در داخل کشور میزبانی شده است و سرور سایت شما در خارج از کشور، زمانی که از لوکال صفحه را فراخوانی می کنید در واقع با اینترنت ISP خودتان به آن دسترسی پیدا می کنید و مبداء و مقصد هر دو در داخل هستند اما زمانی که کدها را در سرور اجرا می کنید به دلیل اینکه سرور در خارج از کشور است و شبکه داخلی اغلب با کندی به درخواست های خارج از کشور پاسخ می دهد با این مشکل مواجه می شوید، متاسفانه همین مشکل در مورد ایندکس سایت های داخلی توسط گوگل نیز وجود دارد!
علی رضایی
۱۳:۲۹ ۱۳۹۹/۰۲/۲۳
var request = (HttpWebRequest)
WebRequest.Create("https://online.agah.com/Order/GenerateNonce");
//{"orderModel":{"Id":0,"CustomerId":166061643,"CustomerTitle":"عمران سیفی فلاح ","OrderSide":"Buy","OrderSideId":1,"Price":2145,"Quantity":1,"Value":0,"ValidityDate":null,"MinimumQuantity":null,"DisclosedQuantity":null,"ValidityType":1,"InstrumentId":2300,"InstrumentIsin":"IRO1BTEJ0001","InstrumentName":"وتجارت","BankAccountId":0,"ExpectedRemainingQuantity":0,"TradedQuantity":0,"CategoryId":"180c76d7-6fce-456d-c43a-9b27872f5051","RemainingQuantity":1,"OrderExecuterId":3},"nonce":"WPAC2Ps6iB0H3aN,1589258633.08653,AT8p3xKS0ZqKTCPzRpdKtpf1uqUWziVksXD+6YuEr4s="}
var postData = "";
// var postData = "customerId=" + Uri.EscapeDataString("166061643");
/* postData += "&TextBox2=" + Uri.EscapeDataString("09122421534");
postData += "&Button1=" + Uri.EscapeDataString("ورود");*/
var data = Encoding.ASCII.GetBytes(postData);
WebHeaderCollection
myWebHeaderCollection = request.Headers;
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = data.Length;
myWebHeaderCollection.Add("Host:online.agah.com");
در خط آخر خطای نحوه ارسال آرگومان می دهد. خطای syntax است یا دستور مورد دارد؟متاسفانه در زمینه NET. فعالیتی نداریم، شاید اطلاعات این صفحه کمک کند:
https://docs.microsoft.com/en-us/dotnet/api/system.net.webheadercollection.add?view=netcore-3.1
یوسف رضایی
۱۱:۱۴ ۱۳۹۹/۰۲/۲۲
با سلام و خسته نباشید خواستم بپرسم خروجی یک فرم (با چند گزینه) بر روی برووزر که اماده برای ارسال برای سرور هست را توی کلاینت با چه دستوری می تونم ببینم
هدفتان از دیدن خروجی را ذکر نکرده اید اما در مرورگرها با زدن دکمه F12 می توانید از بخش Console برای نمایش زنده سورس و تغییرات آن استفاده کنید، ممکن است با توجه به مرورگر افزونه هایی نیز برای آنها وجود داشته باشد که باید در قسمت Add-on ها جستجو کنید.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.