ارسال و دریافت 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 استفاده می کنند .

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

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

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

حسن شفیعی علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. توصیه من: هاست میهن وب‎هاست
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۴۶)

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

  1. علی ۱۳ دی ۱۳۹۹

    سلام
    میخام اطلاعات داخل https://www.instagram.com/%5BUSERNAME%5D/?__a=1 رو با تابع file_get_contents() یا با cURL داخل یک متغییر fetch کنم اما اینستاگرام این دسترسی رو بهم نمیده .
    راهکاریی دارید شما ؟

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

      سلام.
      از api رسمی خود اینستاگرام یا سایت های واسط که api ارایه می دهند استفاده کنید

      پاسخ
      1. علی ۱۳ دی ۱۳۹۹

        میخام بدون api درستش کنم

        پاسخ
  2. آرمان ۲۹ آذر ۱۳۹۹

    سلام جناب شفیعی
    ببخشید من تا حدودی با php اشنایی دارم ، قصد دارم تا به Api هایی که برخی سایت های برای شبکه های مجازی میدن مثلا افزایش ممبر تلگرام وصل بشم ، یعنی اطلاعات فرم داخل سایتم رو بصورت Jason به این وب سرویس ها وصل کنم

    اطلاعات اونها شامل توکن ، لینک Api و آیدی سرویس و لینک سفارش هست ، هر چی در وب جستجو کردم به هیچ جایی نرسیدم آیا برای شما امکان داره منو راهنمایی بفرمایید ؟؟

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

      سلام.
      معمولا سایتی که api ارایه میده کدهای برنامه نویسی رو هم در اختیار توسعه دهنده قرار میده یا اگر سرویس معروفی باشه کدهای آن در سایت هایی مثل گیت هاب یا غیره موجود است
      تا حدودی بلد بودن حتی با راهنمایی هم شما رو به جایی نمیرسونه
      حتما باید php متوسط بلد باشید چون نه شما درست مفهوم رو میرسونید و نه اینکه با راهنمایی بنده به جایی می رسید بهتره اگر پروژه هست به یکی دیگه بسپارید تا براتون انجام بدند

      پاسخ
  3. علی ۲۹ آذر ۱۳۹۹

    سلام ،
    من واسه درس مباحث ویژه مربوط به apiهستش
    که پروژه سایت که با لاراول ساختم رو
    Apiاونو گرفتم
    و با خروجی jSON نشون میده

    می‌خوام همون لینک apiمن که با فرمت jSON هستش رو به فرمت php نشون بدم
    راهنمایی میکنید منو

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

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

      پاسخ
      1. علی ۲۹ آذر ۱۳۹۹

        تصویر رو لطفا ببینید
        https://uupload.ir/files/zbb8_11111.png

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

        فرمت php منظورتون چیه یعنی میخواید خروجی این به جای jsonی که ارسال میکنه بصورت مثلا

        پاسخ
  4. sam ۲۲ آبان ۱۳۹۹

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

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

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

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

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

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

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

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

    با سلام .
    از یک وبسایتی درخواست ایجاد توکن با استفاده از 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’) و در خروجی توکن برگشت داده میشه

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      موفق باشید.

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

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

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

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

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

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

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

      موفق باشید.

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

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

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

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

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

      موفق باشید.

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

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

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

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

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

      موفق باشید.

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

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

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

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

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

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

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

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

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

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

      موفق باشید.

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

    سلام حسن آقا
    من داخل هاست رایگان ربات تلگرام نصب کردم ولی چون تابع 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 هستش که سعی کنید اگر دسترسی دارید بیاریدش روی ۵٫۳ تا کار بده .

        موفق باشید.

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

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

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

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

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

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

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

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

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