ارسال و دریافت jSON توسط cURL در php

  • آپدیت شده در تاریخ

ارسال و دریافت jSON توسط cURL در php

زمانی که با وب سرویس ها و APIها کار می کنید , ارسال و دریافت داده jSON از قابلیت های بسیار ضروری و کاربردی است. کتابخانه cURL ارسال داده jSON را بسیار آسان می کند . در این آموزش نحوه ارسال و دریافت jSON توسط cURL در php نشان می دهیم.

ارسال داده jSON با متد POST توسط cURL

مثال زیر یک درخواست HTTP POST ایجاد و داده جی سون را توسط curl ارسال می کند.

  • آدرسی را که قصد ارسال داده jSON را به آن دارید در $url مشخص کنید
  • درخواست curl را توسط curl_init() آغاز می کنیم.
  • داده ها را در یک آرایه مشخص و آن را توسط تابع json_encode() به یک رشته jSON تبدیل می کنیم.
  • داده های jSON را توسط CURLOPT_POSTFIELDS به فیلد های درخواست post اضافه کنیم
  • Content-Type راتوسط CURLOPT_HTTPHEADER ست می کنیم.
  • جواب برگشتی (Respose) را توسط CURLOPT_RETURNTRANSFER به صورت رشته تبدیل می کنیم.
  • در آخر , تابع curl_exec() برای اجرای درخواست POST فراخوانی میکنیم.

برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود

دریافت اطلاعات json توسط PHP

کد php زیر به شما نشان می دهد چطور اطلاعات json را دریافت کنیم. داده  jSON  را توسط json_decode() دیکد می کنیم . از تابع file_get_contents() هم برای دریافت اطلاعات به صورت خواندنی استفاده می کنیم

کد php بالا برای کار با وب هوک ها در ساخت ربات تلگرام هم بسیار کاربردی است و با استفاده از استریم php://input مقادیری را که webhook به آدرس فایلی که مشخص کردیم ارسال می کند را دریافت می کنیم و به همین صورت داده های json را تجزیه و تحلیل و خروجی صحیح را برای کاربر فرستاده یا در دیتابیس ذخیره می کنیم .

کار کردن با داده های نوع json بسیار ساده است و امروزه بیشتر وب سرویس ها و سایت هایی که api رایگان در اختیار ما قرار می دهند همانند تلگرام و سایت های درگاه پرداخت واسط مثل زرین پال به جای XML از JSON استفاده می کنند .

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

هرگونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق و پیروز باشید

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

آموزش های رایگان بیشتر در اینستاگرام ما ...

NETPARADIS /
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۳۷)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. sam ۲۲ آبان ۱۳۹۹

    یک api مربوط به بیت کوین دارم ولی نمیدونم چطوری بذارم داخل وردپرس

    پاسخ
    1. حسن شفیعی ۲۲ آبان ۱۳۹۹

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

      پاسخ
  2. امید ۲۹ مهر ۱۳۹۹

    با سلام، دوست گرامی یک نمونه کد گذاشتی که نه سرش معلومه و نه تهش. هر کی هم سوالی پرسیده جواب دادی باید خودت باید پی اچ پی بلد باشی! خب اگر قرار باشه یه نفر خودش کامل پی اچ پی بلد باشه لازم نیست آموزش شما رو بخونه، مثلا نمونه کدی که برای mvc قرار دادی درست و بی نقص کار میکنه. یه آموزش یا نمونه کد رو اگر قرار میدهی یا کامل قرار بده یا اصلا قرار نده!!

    پاسخ
    1. حسن شفیعی ۳۰ مهر ۱۳۹۹

      سلام. نمونه کد کامل و دقیق هست و اصلا هیچ کم و کاستی نداره.
      می بینید که از curl استفاده شده و هیچ مورد دیگه ای نداره تعجب داره می گید که ناقصه چون کل کد همینه نه زیاد یعنی اینو داخل یک فایل php کپی پیست کنید به جای url آدرس مورد نظر رو بزنید خروجی داخل متغییر $result ذخیره میشه که میتونید echo یا var_dump() کنید.
      همچنین آپشن هایی که میتونید ست کنید تا برای سمت سرور اون api قابل خواندن باشه مشخص و توضیح داده شده.
      آموزش curl هم ببینید.

      پاسخ
  3. مسعود ۳۱ اردیبهشت ۱۳۹۹

    با سلام .
    از یک وبسایتی درخواست ایجاد توکن با استفاده از api داریم و از نمونه کد زیر گفتند استفاده کنید ما می خواهیم در بستر php استفاده کنیم .
    لطف کنید نحوه استفاده از آن را نمایش دهید.
    curl ‘https://api.nobitex.ir/auth/login/’ \
    -X POST \
    -H “Content-Type: application/json” \
    –data $'{“username”:”name@example.com”,”password”:”secret-password-1234″}’

    پاسخ
    1. حسن شفیعی ۳۱ اردیبهشت ۱۳۹۹

      سلام. از این اسکریپت که مخصوص استفاده از این api هست استفاده کنید :
      https://github.com/nekofar/nobitex-api-php

      پاسخ
      1. مسعود ۳۱ اردیبهشت ۱۳۹۹

        سلام من می خوام با توجه به سایت زیر
        https://apidocs.nobitex.ir/#api
        با ارسال نام کاربری و رمز عبور یک توکن دریافت کنم .
        و اینکه در حال حاضر برای انجام اینکار کجای اسکریپت باید اطلاعات رو وارد کنم تا api key رو دریافت کنم

        پاسخ
      2. حسن شفیعی ۳۱ اردیبهشت ۱۳۹۹

        سلام. تا زمانی که php رو بصورت متوسط بلد نباشید نمیتونید اسکریپت رو بنویسید. با توجه به لینک ارسالی اسکریپت رو دانلود و نصب کنید و اطلاعات ورود رو قرار بدید

        پاسخ
      3. مسعود ۳۱ اردیبهشت ۱۳۹۹

        دوست عزیز من میخوام از سایت فوق یه توکن دریافت کنم و اینکه نحوه کانفیک اسکریپت و استفاده از آن را توضیحی می فرمایید .

        پاسخ
      4. حسن شفیعی ۳۱ اردیبهشت ۱۳۹۹

        در اینجا قرار میدید $config = Config::doAuth(‘username’, ‘password’) و در خروجی توکن برگشت داده میشه

        پاسخ
  4. adler ۲۹ اسفند ۱۳۹۸

    سلام خسته نباشد. ممنون از توضیحتون. یک سوال داشتم.
    من میخام از از سایت https://www.example.com که اطلاعات به صورت جیسون هستن رو پرینت کنم. این کد ها رو میزنم اما غلطه.

    $data = json_decode(file_get_contents(‘https://www.example.com’), true);
    print;($data)

    پاسخ
    1. حسن شفیعی ۲۹ اسفند ۱۳۹۸

      سلام ممنون.
      دقیقا چه خطایی دریافت می کنید ؟ باید دقیقتر بگید تا بتونیم راهنمایی کنیم.

      پاسخ
  5. مسیح ۹ خرداد ۱۳۹۸

    سلام خسته نباشید بابت آموزش
    میشه روش استفاده کامل از api های اپارات توضیح بدید؟ خیلی دنبالشم پیدا نشد لطف میکنین
    Aparat.com/api

    پاسخ
    1. حسن شفیعی ۹ خرداد ۱۳۹۸

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

      پاسخ
  6. علی یعقوبی ۱۵ فروردین ۱۳۹۸

    سلام و خسته نباشید
    بنده دو صفحه دارم با نام های api.php و InstagramAPI.php و این دو صفحه در هاست شخصی بنده (localhost) میباشد.

    بنده کدی نوشتم با curlکه با اجرای صفحه InstagramAPI باید یکسری اطلاعات با متد POST به صفحه api ارسال شوند و و صفحه api هم با دریافت اطلاعات ، یکسری اطلاعات دیگر را با متد POST و با همان روش curl باید به صفحه InstagramAPI ارسال شوند!

    اطلاعات از صفحه InstagramAPI ارسال میشوند و نتیجه هم برگردانده میشود ولی صفحه api با اینکه هیچ مشکلی ندارد اما اطلاعات را ارسال نمیکند!

    این رو هم بگم که که با اجرای صفحه api اطلاعات ارسال میشوند اما با اجرای صفحه InstagramAPI ، اطلاعات از صفحه api ارسال نمیشوند!

    ممنون میشم کمک کنید
    با تشکر

    پاسخ
    1. حسن شفیعی ۱۷ فروردین ۱۳۹۸

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

      پاسخ
  7. فرهاد ۱۵ بهمن ۱۳۹۷

    سلام جناب شفیعی
    ممنون از راهنمایی و زحماتتون
    یه سوال دارم در مورد ربات تلگرام ببخشید اینجا پرسیدم
    چطور میتونم messeage id متنی و رو که خود ربات میخواد بفرسته تو کانال یا گروه رو بدست بیارم
    خواستم با یه ربات دیگه بخونم که نشد پیام هم رو نمیخونن
    سپاس

    پاسخ
    1. حسن شفیعی ۱۵ بهمن ۱۳۹۷

      سلام. خواهش میکنم.
      پیامی که ارسال می کند خودش یک مقداری رو برگشت میده که از اون میتونید msg id رو در بیارید

      مثلا $result = sendmessage($userid,$text); که یک پیام رو ارسال می کنه نتیجه اون رو داخل $result برگشت و ذخیره میکنه که میتونید واکشی کنید و id رو بدست بیارید.

      موفق باشید.

      پاسخ
  8. فرهاد ۲۱ دی ۱۳۹۷

    پس echo بشه هرچی تو این صفحه x هست رو برمیگردونه

    پاسخ
  9. فرهاد ۲۱ دی ۱۳۹۷

    ببخشید من نمیتونم منظرمو برسونم
    یه مثال بزنم
    من یه عدد میفرستم با کرل به یه صفحه بنام x حالا تو اون صفحه یسری اطلاعات رو که خیلی زیاده از دیتابیس میخونه و تبدیل به json میکنه حالا اونو چطور برگردونم به این صفحه ای که اول بودم
    ببخشید خیلی سوال پرسیدم

    پاسخ
    1. حسن شفیعی ۲۱ دی ۱۳۹۷

      خب تو پاسخ اول خدمتتون توضیح داده شده که شما اون داده که json شده رو echo می کنید همین
      echo json_encode($result);

      و بعد توی این صفحه شما تمام این اطلاعات برگشت داده شده رو داخل $result = curl_exec($ch); دارید و کافیه که var_dump کنید تا داده ها رو ببینید.

      موفق باشید.

      پاسخ
  10. فرهاد ۲۱ دی ۱۳۹۷

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

    پاسخ
    1. حسن شفیعی ۲۱ دی ۱۳۹۷

      سلام. خب کاملا بستگی به صفحه مورد نظر داره کاری که میخوایین انجام بدید داره. آیا صفحه مورد نظر رو خودتون کدنویسی کردید یا خیر . اگر بله که تماما به شما بستگی داره چه جور جوابی برگشت بدید.
      اگر خیر مثلا بعضی api ها شما میتونید مشخص کنید که نوع فرمت json رو برگشت بده یا xml و حالا جوابی که برگشت میده بسته به نوع داده شما و همچنین نوع عملیات و موفقیت آمیز بودن یا نبودن و … متفاوت است.

      در کل جواب بازگشتی رو اگر صفحه منبع رو کدنویسی کردید بستگی به شما داره که میتونه یه echo باشه یا هر چیزی و اگر از api‌استفاده می کنید بخش داکیومنت رو باید مطالعه کنید یا کد مثال رو بردارید.

      موفق باشید.

      پاسخ
  11. فرهاد ۲۱ دی ۱۳۹۷

    سلام و تشکر از بابت توضیحات بسیار ساده و روان
    یه سوال دارم من اطلاعات رو میفرستم به یک صفحهدیگه چطور اونجا اظلاعات رو برگردونم به همین کرل

    پاسخ
    1. حسن شفیعی ۲۱ دی ۱۳۹۷

      سلام. خوشحالیم که مفید واقع شده.

      شما بر اساس اطلاعات ارسالی به صفحه مورد نظر در خروجی چیزی رو دریافت می کنید که این اطلاعات برگشتی توسط $result = curl_exec($ch); دریافت میشه و میتونید استفاده کنید. (متغییر $result رو میتونید var_dump کنید.)

      موفق باشید.

      پاسخ
  12. پژواک ۲۳ آذر ۱۳۹۷

    سلام
    لطفا توضیح بدید که این کدها رو کدوم قسمت لاراول باید قرار داد؟

    پاسخ
    1. حسن شفیعی ۲۴ آذر ۱۳۹۷

      سلام. شما باید متناسب با پروژه خود از این کدها استفاده کنید و اطلاعی از اینکه باید کجا استفاده کنید ندارم. بهتره ابتدا php را متوسط به بالا یاد بگیرید.
      موفق باشید.

      پاسخ
  13. ممد ۱۰ آذر ۱۳۹۷

    سلام
    بنده با curl میخوام اطلاعات api تلگرامو تو سایتم چاپ کنم اینکارو انجام میدم چاپ میشه اما توسط نرم افزار من خونده نمیشه نمیدونم نوع چاپ شده اطلاعات فرق داره در صفحه؟
    نمونه در سایت تلگرام خروجیش رنگش فردق داره ببینید در عکس زیر
    http://uupload.ir/files/hzny_tele.png
    اما تو سایت من
    http://uupload.ir/files/r0qv_me.png

    چجوری چاپ کنم انقده اینورو اونورش کردم دیگه نشد ک نشد

    پاسخ
    1. حسن شفیعی ۱۱ آذر ۱۳۹۷

      سلام. باید content-type اسکریپت رو تغییر بدید

      header('Content-type: application/json');

      موفق باشید.

      پاسخ
  14. حمیدرضا ۱۹ اسفند ۱۳۹۶

    سلام حسن آقا
    من داخل هاست رایگان ربات تلگرام نصب کردم ولی چون تابع file_get_content بسته بود نتونستم از اون استفاده کنم و از استریم php://input نمی‌شد استفاده کرد و به جای اون از $_POST استفاده کردم ولی پردازش رشته دریافتی خیلی سخت میشه.
    لطفا اگر راه حلی دارید منو راهنمایی کنید.
    کدی که من نوشتم داخل لینک زیر قرار دادم.
    http://s8.picofile.com/file/8321367126/robot.php.html
    ممنون

    پاسخ
    1. حسن شفیعی ۱۹ اسفند ۱۳۹۶

      سلام .

      به جای file_get_contents از curl استفاده کنید


      function netparadis( $url ){
      $options = array(
      CURLOPT_RETURNTRANSFER => true, // return web page
      CURLOPT_HEADER => false, // don't return headers
      CURLOPT_FOLLOWLOCATION => true, // follow redirects
      CURLOPT_ENCODING => "", // handle all encodings
      CURLOPT_USERAGENT => "spider", // who am i
      CURLOPT_AUTOREFERER => true, // set referer on redirect
      CURLOPT_CONNECTTIMEOUT => ۱۲۰, // timeout on connect
      CURLOPT_TIMEOUT => ۱۲۰, // timeout on response
      CURLOPT_MAXREDIRS => ۱۰, // stop after 10 redirects
      );

      $ch = curl_init( $url );
      curl_setopt_array( $ch, $options );
      $content = curl_exec( $ch );
      curl_close( $ch );

      return $content;
      }

      همچنین به جای php://input از $HTTP_RAW_POST_DATA بهره ببرید .

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

      موفق باشید.

      پاسخ
      1. حمیدرضا ۱۹ اسفند ۱۳۹۶

        سلام حسن جان
        مثل اینکه HTTP_RAW_POST_DATA هم دپریکیت شده و در هاست رایگان parspack جواب نمیده.
        ممنون.

        پاسخ
      2. حسن شفیعی ۱۹ اسفند ۱۳۹۶

        سلام . این مورد مربوط به هاست نیست و ورژن php هستش که سعی کنید اگر دسترسی دارید بیاریدش روی ۵٫۳ تا کار بده .

        موفق باشید.

        پاسخ
  15. حمیدرضا ۳۰ بهمن ۱۳۹۶

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

    پاسخ
    1. حسن شفیعی ۳۰ بهمن ۱۳۹۶

      سلام . خیلی ممنونم و خشوحالم که مفید واقع شده . ممنونم موفق و پیروز باشید.

      پاسخ
  16. مهدی ۱۷ بهمن ۱۳۹۶

    با سلام ،
    آیا api های اینستاگرام مثل اینستاگرام می باشد؟

    پاسخ
    1. حسن شفیعی ۱۷ بهمن ۱۳۹۶

      سلام
      api اینستاگرام کمی متفاوت از api های معمولی است چرا که نیاز است یک app بسازید و احراز هویت هایی داشته باشید که برای اینکار توصیه میکنم از کلاس https://github.com/cosenary/Instagram-PHP-API برای راحتی کار استفاده کنید و داکیومنت اینستاگرام رو هم مطالعه بفرمایید.
      موفق و پیروز باشید

      پاسخ
دوره های آموزشی

دانلود رایگان کتاب آموزش PHP

صفر تا صد PHP و MySQL را یکجا یاد بگیرید
همین الان دانلود کن
نگران نباشید. ایمیل‌های مزاحم نمی‌فرستیم
close-link