اینترنت پنجره ها اندروید

چرا به فایل XMLRPC پی اچ پی نیاز دارید؟ مسابقات برنامه نویسی

چند روز پیش متوجه شدم که بار سایت های من در میزبانی در حال افزایش است. اگر معمولا در منطقه 100-120 "طوطی ها" (CP) بود، پس از آن طی چند روز گذشته به 400 تا 500 درجه سانتی گراد افزایش یافته است. در این مورد هیچ چیز خوب نیست، زیرا هوستر می تواند به یک تعرفه گران تر تبدیل شود و حتی دسترسی به سایت ها را پوشش دهد، بنابراین من شروع به درک کردم.

اما من یک روش را انتخاب کردم که به شما امکان می دهد عملکرد XML-RPC را ذخیره کنید: نصب پلاگین Pingback XML-RPC غیر فعال کنید. این فقط روش های "خطرناک" Pingback.ping و Pingback.Extensions.getpingbacks را حذف می کند، عملکرد XML-RPC را ترک می کند. پس از نصب افزونه، فقط باید فعال شوید - هیچ پیکربندی دیگری لازم نیست.

در طول راه، من تمام مهاجمان IP را به ثمر رساندم. سایت های من را برای جلوگیری از دسترسی آنها به اشتراک گذاشتم. فقط در پایان فایل به پایان رسید:

سفارش تمام انکار از 5.196.5.116 37.59.120.214 92.222.35.159

این همه، در حال حاضر ما به طور ایمن از وبلاگ از حملات بیشتر با استفاده از xmlrpc.php محافظت می کنیم. سایت های ما متوقف شد حمل و نقل با درخواست، و همچنین حمله به سایت های شخص ثالث DDOS.

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

در زیر ما xmlrpc.php را دیدیم و چرا آن را ایجاد کردیم. ما همچنین در نظر خواهیم گرفت مشکلات معمول امنیت آن می تواند باعث شود و چگونه آنها را برای سایت خود در وردپرس تعمیر کند.

XML-RPC یک تابع وردپرس است، که به شما اجازه می دهد تا داده ها را از http propruding به عنوان حمل و نقل و XML انتقال دهید - برای رمزگذاری. از آنجا که وردپرس یک سیستم بسته نیست و اغلب با سیستم های دیگر ارتباط برقرار می کند، راه حل ها برای این کار یافت می شود.

به عنوان مثال، بگذارید بگوییم شما می خواهید یک نشریه را از سایت خود از خود انجام دهید تلفن همراه. شما باید از دسترسی از راه دور ارائه شده توسط xmlrpc.php استفاده کنید.

تابع اصلی XMLRPC.php توانایی اتصال به سایت از گوشی هوشمند، پیاده سازی Trackbakes و Linkbies از سایت های دیگر و برخی از توابع مرتبط با پلاگین Jetpack است.

چرا xmlrpc.php ایجاد شد و چگونه استفاده شد؟

پیاده سازی XML-RPC در روزهای اولیه وردپرس دور می شود و حتی قبل از اینکه وردپرس تبدیل به وردپرس شود.

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

راه حل (در آن زمان) ایجاد یک مشتری برای وبلاگ نویسی آفلاین بود، جایی که شما می توانید محتوای خود را تشکیل دهید، سپس به وبلاگ خود متصل شوید و آن را منتشر کنید. این اتصال از طریق XML-RPC انجام شد. با استفاده از قابلیت اصلی XML RPC، برنامه های اولیه با استفاده از اتصالات مشابه، مردم را با این فرصت برای ورود به سایت های وردپرس خود از سایر دستگاه ها ارائه می دهند.

XML RPC امروز

در سال 2008، با نسخه 2.6 وردپرس، گزینه XML-RPC ON و OFF ظاهر شد. با این حال، با انتشار برنامه وردپرس برای آی فون، پشتیبانی از XML-RPC به طور پیش فرض فعال شد و امکان تعطیل وجود نداشت. بنابراین هنوز هم باقی می ماند و امروز.

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

خواص XML-RPC

با یک رابط کاربری جدید برنامه کاربردی وردپرس (API)، ما می توانیم XML-RPC را به طور کامل غیر فعال کنیم. امروزه این API جدید هنوز در مرحله آزمون است و تنها می تواند از طریق یک پلاگین ویژه گنجانده شود.

اگر چه شما می توانید API را مستقیما در هسته وردپرس در آینده انتظار داشته باشید، که به طور کامل نیاز به استفاده از xmlrpc.php را حذف می کند.

API جدید کامل نیست، اما خوب است حفاظت قابل اعتماد، بر خلاف xmlrpc.php.

چرا xmlrpc.php را غیرفعال کنید

بزرگترین مشکل مرتبط با XML-RPC ایمنی است. مشکل به طور مستقیم به XML-RPC مربوط نیست، اما می تواند مورد استفاده قرار گیرد تا حمله به سایت شما را روشن کند.

البته شما می توانید از خودتان محافظت کنید رمز عبور قابل اعتماد و پلاگین های وردپرستضمین امنیت ولی بهترین رژیم حفاظت به سادگی آن را غیر فعال خواهد کرد.

دو ضعف اصلی XML-RPC وجود دارد که در گذشته مورد استفاده قرار گرفتند.

اول - با استفاده از حمله به وسیله انتخاب مستقیم رمز عبور (حملات نیروی بی رحم) برای دسترسی به سایت شما استفاده می شود. حمله به تلاش برای دسترسی به سایت خود با استفاده از xmlrpc.php انتخاب ترکیب های مختلف نام کاربری و رمزهای عبور. آنها می توانند به طور موثر از یک تیم برای آزمایش صدها کلمه عبور مختلف استفاده کنند. این به آنها اجازه می دهد تا از ابزارهای امنیتی عبور کنند که معمولا حملات انتخاب مستقیم را شناسایی و مسدود می کنند.

دوم - ترجمه سایت به آفلاین توسط DDOS حمله. هکرها از اطلاع قبلی در وردپرس استفاده خواهند کرد تا هزاران سایت را در همان زمان ارسال کنند. این قابلیت XMLRPC.php هکرها را با مقدار تقریبا بی نهایت آدرس های IP برای توزیع حمله DDoS می دهد.

برای بررسی اینکه آیا XML-RPC در سایت شما کار می کند، می توانید آن را با استفاده از ابزار به نام XML-RPC معتبر اجرا کنید. وب سایت خود را با استفاده از ابزار اجرا کنید، و اگر یک پیام خطا دریافت کنید، به این معنی است که شما پشتیبانی XML-RPC ندارید.

اگر یک پیام تکمیل موفقیت آمیز دریافت کنید، می توانید XMLRPC.php یکی از دو رویکرد زیر را متوقف کنید.

روش 1: قطع اتصال xmlrpc.php با پلاگین

غیر فعال کردن XML-RPC در سایت وردپرس شما فوق العاده آسان است.

به بخش بروید پلاگین\u003e اضافه کردن جدید در کنسول مدیریت وردپرس شما. پلاگین را پیدا کنید XML-RPC را غیرفعال کنید و آن را نصب کنید، به نظر می رسد در تصویر زیر:

پلاگین را فعال کنید و همه چیز آماده است. این افزونه به طور خودکار کد لازم را برای غیرفعال کردن XML-RPC وارد می کند.

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

اگر فقط می خواهید غیر فعال کنید عناصر جداگانه XML-RPC، اما به پلاگین ها و توابع دیگر اجازه می دهد تا کار کنند، سپس به چنین پلاگین ها مراجعه کنید:

  • توقف حمله XML-RPC. این افزونه تمام حملات XML-RPC را متوقف می کند، اما مجاز به ادامه عملیات چنین پلاگین هایی به عنوان JetPack و سایر ابزارهای اتوماتیک و پلاگین ها، ارائه دسترسی به فایل های XMLRPC.php است.
  • کنترل انتشار XML-RPC. این به شما اجازه می دهد تا کنترل را ذخیره کنید و از انتشارات از راه دور استفاده کنید.

روش 2: Disconnect XMLRPC.php دستی

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

باز کردن file.htaccess ممکن است مجبور شوید روشن کنید فایل های مخفی' که در مدیر فایل یا مشتری FTP برای پیدا کردن این فایل.

این کد را به فایل وارد کنید .htaccess:

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

افکار نهایی

به طور کلی، XML-RPC یک راه حل خوب برای برخی از مشکلات بود که ناشی از انتشار از راه دور در سایت وردپرس شما بود. با این حال، در همان زمان، برخی از حفره های امنیتی ظاهر شد، که برای برخی از صاحبان سایت در وردپرس بسیار خطرناک بود.

برای اطمینان از اینکه سایت شما امن است، توصیه می شود به طور کامل XMLRPC.php را کاملا غیرفعال کنید اگر شما نیازی به برخی از توابع لازم برای انتشار از راه دور و پلاگین Jetpack ندارید. سپس شما می توانید از پلاگین های بایپس استفاده کنید که به شما امکان می دهد از این توابع استفاده کنید، در حالی که حفره های امنیتی را اصلاح کنید.

در طول زمان، ما می توانیم انتظار داشته باشیم توابع XML-RPC به یکپارچه سازی وردپرس جدید API که پشتیبانی خواهد کرد دسترسی از راه دوربدون فداکاری امنیت.

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


پست او همچنین نشان می دهد که چگونه به انجام احراز هویت مرورگر، به شرح زیر:
$ درخواست \u003d xmlrpc_encode_request ("methodname"، آرایه ("methodsaram"))؛
$ auth \u003d base64_encode ($ username. ":" $ رمز عبور)؛
$ header \u003d (version_compare (phpversion ()، "5.2.8"))
؟ آرایه ("نوع محتوا: متن / XML"، "مجوز: پایه $ auth")
: "محتوای نوع: متن / XML \\ r \\ n nauthorization: Basic$ auth "؛ //
$ context \u003d stream_context_create (آرایه ("http" \u003d\u003e آرایه (
"روش" \u003d\u003e "پست"،
"header" \u003d\u003e $ header،
"محتوا" \u003d\u003e $ درخواست
)));
$ webservice \u003d. "http://www.example.com/rpc";
$ file \u003d file_get_contents ($ webservice، false، $ context)؛
$ response \u003d xmlrpc_decode ($ فایل)؛
اگر (xmlrpc_is_fault ($ پاسخ)) (
بازگشت "XMLRPC: $ پاسخ [Faultstring] ($ پاسخ [خطا])"؛
) دیگر (
بازگشت $ پاسخ؛
}
?>
1 - ویرایشگر توجه: این یک اصلاح از "Sanderswang DT PHP در Gmail Dot Com" است

16 سال پیش.

رشته های دودویی (با xmlrpc_set_type تنظیم شده است ... بلوک مثل شما انتظار می رود. اما پس از هر شخصیت 80، این تابع، نهاد XML را وارد می کند "، که یک خط جدید Unicode است، به طوری که باعث ایجاد یک بسته بندی خط، که به طور صحیح احمقانه است.

احمقانه هر چند ممکن است، آن را باعث مشکلات واقعی برای برخی از سرورهای XML RPC، مانند http://jakarta.apache.org/xmlrpc/ (Nee Helma). از این نهادها با چیزی مانند

$ req \u003d preg_replace ("/ /"، ""، xmlrpc_encode_request ("my.method"، $ args))؛

در اطراف مشکل کار می کند

11 سال پیش.

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

ما در هنگام استفاده از این Funche، با استفاده از رشته های UTF دوبعدی، با استفاده از این Funche، با استفاده از Servlet آپاچی XML-RPC و ذخیره آن در پایگاه داده MySQL، مشکلی داشتیم. آن را با تنظیم "فرار از" به فقط "نشانه گذاری" و "رمزگذاری" به "UTF-8" حل شد (Don "T فراموش نکنید که" UTF-8 "را در XMLRPC_DECODE نیز تنظیم کنید).

به نظر می رسد رشته های رمزگذاری UTF-8 با استفاده از بایت های خود به عنوان نهادهای خود به جای کاراکترهای خود، Escapad را به عنوان اشخاص خود می گیرند.

9 سال پیش.

همیشه سعی کرد یک آرایه مانند XMLRPC را ارسال کند؟
$ var1 \u003d آرایه (7 \u003d\u003e 14.9 \u003d\u003e 18)؛

آرایه خروجی کاملا متفاوت است! به نظر می رسد:
$ var2 \u003d آرایه (14،18)؛

تنها راه حل که من پیدا کردم این است که یک فضای به شاخص را آماده کنم:
$ var3 \u003d آرایه ("7" \u003d\u003e 14، "9" \u003d\u003e 18)؛

با استفاده از این روش شما "نتیجه درست را دریافت خواهید کرد. ($ var1)

16 سال پیش.

این تابع باید توسط یک سرویس گیرنده XML RPC برای ایجاد یک بار XML برای درخواست XML-RPC استفاده شود.

$ params \u003d "system.methodsignature"؛
$ methodhod \u003d "system.methodhelp"؛
$ نیاز \u003d xmlrpc_encode_request ($ method، params $)؛
echo (درخواست $)؛
?>

تولید می کند؛



system.methodhelp

system.methodsignature



استدلال دوم نوع متغیر را به رسمیت می شناسد و ساختار صحیح XML-RPC را تولید می کند. برای جزئیات بیشتر به xmlrpc_encode () مراجعه کنید.

12 سال پیش.

مشتری ساده OO با استفاده از Funtion Overtion:

pHP Metho Test_hellogorld به روش XMLRPC Test.Hellogorld ترجمه شده است.

کلاس RPCClient (

خصوصی $ _Methods؛
خصوصی $ _Context؛
خصوصی $ _URL؛

تابع __construct ($ URL، $ کاربر، $ passwd) (
$ auth \u003d base64_encode (sprintf ("٪ s:٪ s"، $ user، $ passwd))؛
$ این -\u003e _ context \u003d stream_context_create (آرایه (آرایه)
"http" \u003d\u003e آرایه (
"روش" \u003d\u003e "پست"،
"header" \u003d\u003e "نوع نوع: متن / xml \\ r \\ n".
"مجوز: پایه $ auth"،

)
));
$ این -\u003e _ URL \u003d $ URL؛

$ این-\u003e ثبت نام ("test_heloworld")؛

تابع __Call ($ methodName، params) (
اگر (array_key_exists ($ methodName، $ این -\u003e _ روش ها)) (
// در appelle la fonchion RPC
$ m \u003d str_replace ("_"، "."، $ methodName)؛
$ r \u003d xmlrpc_encode_request ($ m، params، array ("vervosity" \u003d\u003e "newlines_only"))؛
$ c \u003d $ این -\u003e _ زمینه؛
stream_context_set_option ($ c، "http"، "content"، $ r)؛
$ f \u003d file_get_contents ($ این -\u003e _ URL، false، $ c)؛
$ res \u003d xmlrpc_decode ($ f)؛
بازگشت $ rip؛
) دیگر (
// appelle la fonchion de l "objet
call_user_method_array ($ methodName، $ این، $ params)؛
}
}

عملکرد خصوصی ثبت نام ($ روش) (
$ این -\u003e _ روش ها [$ روش] \u003d درست؛
}

از ظهر، شنبه ها بر روی سرور من، که در حدود 25 سایت در وردپرس میزبانی می شود، ترمزهای وحشی آغاز شد. از آنجایی که من توانستم از حملات قبلی زنده بمانم (،) متوجه نشدم، بلافاصله متوجه نشدم که موضوع چیست.

هنگامی که من متوجه شدم، معلوم شد که گذرواژه ها درخواستهای بسیاری از درخواست ها به XMLRPC بودند.

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

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

1. نصب مجدد، محدودیت ورود ورود به سیستم افزونه - قرار دادن آن، از آنجا که حفاظت دیگر به شدت آویزان سرور، به عنوان مثال، هنگام استفاده از پلاگین راه حل امنیتی ورود به سیستم، سرور پس از نیم ساعت فوت کرده است، پلاگین بسیار بارگیری پایگاه داده است.

در تنظیم، مطمئن شوید که تست "برای پروکسی" را روشن کنید - در غیر این صورت IP سرور خود را برای همه تعریف می کند و به طور خودکار همه را مسدود می کند.
به روز رسانی، تشکر از شما، جزئیات زیر در نظرات - یک تیک "برای پروکسی" روشن کنید، فقط اگر تعریف کار نمی کند زمانی که "اتصال مستقیم" فعال نیست

2. RPC XML را جدا کنید - پلاگین XML-RPC را غیرفعال کنید (به سادگی آن را فعال کنید و همه چیز را فعال کنید).

3. بستن WP-login.php - اگر با سایت از طریق IP تماس بگیرید، پلاگین کار نمی کند و ترشی ها به سایت DAB ادامه می دهند. برای جلوگیری از این، v.htaccess اضافه کردن:

سفارش انکار، اجازه می دهد انکار از همه

فایل ورود WP-login کپی شده است، تغییر نام هر نام عجیب و غریب، به عنوان مثال poletnormalny.php و در داخل فایل با انتقال خودکار تمام کتیبه ها wp-login.php در poletnormalny.php.
همه، حالا شما فقط می توانید با مدیر فایل خود تماس بگیرید.

پس از این 3 مرحله ساده، سایت ها دوباره شروع به پرواز کردند و آرام شدند.

خوب، به طور ناگهانی جالب است

یکی از گزینه هایی برای دیدن آنچه شما مورد حمله قرار گرفته اید. این را می توان در سیاهههای مربوط به nginx دیده می شود (به عنوان مثال، در اینجا مسیر برای debian / var / log / nginx file access.log است).

معرفی XML-RPC

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

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

اگر شما تصمیم به مشکل "در پیشانی"، پس از آن راه حل بلافاصله پیشنهاد می کند: برنامه (اسکریپت در سایت)، که برای داده ها ضروری است، یک صفحه از سرور را به عنوان یک "کاربر عادی" دریافت می کند، disassembles (Pars ) کد HTML نتیجه و اطلاعات لازم را از آن برجسته می کند. این می تواند انجام شود یا عادی عبارت منظم، یا با هر تجزیه کننده HTML. پیچیدگی رویکرد در بی رحمانه آن است. اول، برای به دست آوردن بخش کوچکی از داده ها (داده های مربوط به ارزها به معنای واقعی کلمه دوازده شخصیت دیگر) شما باید کل صفحه را دریافت کنید، و این حداقل چند ده لیبیت است. ثانیا، با هر گونه تغییر در کد صفحه، به عنوان مثال، طراحی تغییر کرده است یا چیز دیگری، الگوریتم تجزیه و تحلیل ما باید مجددا بازی کند. بله، و منابع مناسب انتخاب خواهند شد.

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

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

ولی! برای مثال ما با دوره های ارز، که باید از سایت بانک در موتور فروشگاه آنلاین منتقل شود، چنین راه حل بسیار پیچیده خواهد بود. پس از همه، تنها توصیف استاندارد صابون، یک و نیم هزار نفر را غیرفعال می کند و این همه نیست. برای استفاده عملی ما باید مطالعه کنیم که هنوز با کتابخانه های شخص ثالث و برنامه های افزودنی کار می کنند (فقط با PHP 5.0 شروع می شوند، شامل یک کتابخانه برای کار با صابون است)، صدها و هزاران ردیف کد خود را بنویسید. و همه اینها برای به دست آوردن چندین حرف و اعداد - به وضوح بسیار سنگین و غیر منطقی است.

بنابراین، یکی دیگر از آنها وجود دارد، با کشش شما می توانید یک استاندارد جایگزین برای تبادل اطلاعات بگویید - XML-RPC. این شرکت با مشارکت مایکروسافت توسط شرکت Userland Software Inc طراحی شده است و برای انتقال داده های یکپارچه بین برنامه ها از طریق اینترنت طراحی شده است. این می تواند SOAP را هنگام ساخت سرویس های ساده جایگزین کند، جایی که تمام ویژگی های شرکتی این خدمات وب ضروری نیست.

مخفف XML-RPC چیست؟ RPC رمزگشایی به عنوان روش از راه دور تماس - تماس از راه دور روش ها این به این معنی است که برنامه (بدون توجه به اسکریپت بر روی سرور یا برنامه عادی در رایانه مشتری) می تواند به طور شفاف با استفاده از یک روش که از لحاظ جسمی اجرا شده و اجرا شده بر روی کامپیوتر دیگری باشد، شفاف است. XML در اینجا برای اطمینان استفاده می شود فرمت جهانی توصیف داده های منتقل شده. به عنوان حمل و نقل، پروتکل HTTP برای ارسال پیام ها اعمال می شود، که به شما اجازه می دهد آزادانه داده ها را از طریق هر دستگاه شبکه - روترها، فایروال ها، سرورهای پروکسی مبادله کنید.

بنابراین، برای استفاده، شما باید داشته باشید: سرور XML-RPC، که یک یا چند روش را فراهم می کند، مشتری XML-RPC، که می تواند یک درخواست صحیح را ایجاد کند و پاسخ سرور را پردازش کند و همچنین پارامترهای سرور مورد نیاز را پردازش کند کار موفق - آدرس، نام روش و روش انتقال روش انتقال.

تمام کار با RPC XML در حالت "Reaction-Response" اتفاق می افتد، این یکی از تفاوت های استاندارد صابون است، جایی که مفاهیم معاملات وجود دارد و توانایی برقراری تماس های تعطیل (زمانی که سرور موجب صرفه جویی در درخواست و پاسخ می دهد به آن در یک زمان خاص در آینده). اینها ویژگی های اضافی بیشتر برای خدمات قدرتمند شرکت های قدرتمند مفید خواهد بود، آنها به طور قابل توجهی توسعه و حمایت از سرورها را به طور قابل توجهی پیچیده می کنند و الزامات اضافی را برای توسعه دهندگان تصمیم گیری مشتری قرار می دهند.

روش کار برای کار با RPC XML با تشکیل پرس و جو آغاز می شود. یک درخواست معمول به نظر می رسد این است:

POST / RPC2 HTTP / 1.0
عامل کاربر: ESHOP-TEST / 1.1.1 (FREEBSD)
میزبان: server.localnet.com.
نوع نوع: متن / XML
طول عمر: 172



TestMetod
سلام، XML-RPC!


در ردیف اول، یک هدر استاندارد تشکیل شده است درخواست HTTP پست. پارامترهای اجباری شامل میزبان، نوع داده (نوع MIME)، که باید متن / XML، و همچنین طول پیام باشد. همچنین، استاندارد نشان می دهد که میدان عامل کاربر باید پر شود، اما ممکن است حاوی مقدار دلخواه باشد.

بعدی هدر سند XML معمولی است. عنصر عنصر ریشه - تنها یک نفر می تواند وجود داشته باشد و نمی تواند چنین گره هایی را به عنوان شرکت های تابعه داشته باشد. این به این معنی است که یک درخواست می تواند تنها یک روش بر روی سرور نامیده شود.

خط TestMetod نشان می دهد که ما این روش را به نام TestMetod می نامیم. در صورت لزوم، در اینجا شما می توانید نام برنامه یا ماژول حاوی روش، و همچنین مسیر آن را مشخص کنید. مشخصات XML-RPC اگر چه برخی از محدودیت ها را بر روی شخصیت تعیین می کند که روش را می توان نشان داد، اما نحوه تفسیر آنها - به طور کامل بستگی به اجرای سرور دارد.

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

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

Tetener ما پاسخ سرور را تجزیه و تحلیل خواهیم کرد. عنوان پاسخ HTTP، اگر درخواست با موفقیت پردازش شود، سرور پاسخ HTTP / 1.1 200 را دریافت می کند. همچنین همانطور که در پرس و جو، شما باید به درستی نوع MIME، طول پیام و تاریخ تاریخ پاسخ را مشخص کنید.

بدن خود خود را به شرح زیر است:



درست است، واقعی.


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

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

و در حال حاضر به طور خلاصه انواع داده ها را در XML-RPC در نظر بگیرید. انواع داده ها 9 تا هفت نوع ساده و 2 مجموعه هستند. هر نوع از برچسب آن یا مجموعه ای از برچسب ها (برای انواع پیچیده) شرح داده شده است.

انواع ساده:

تمام اعداد - برچسب یا ;

نوع منطقی - برچسب ممکن است هر دو ارزش 0/1 و درست / نادرست را مصرف کنند؛

ascii string - توصیف برچسب و ممکن است یک رشته دلخواه از شخصیت ها داشته باشد؛

اعداد اعشاری - برچسب همچنین ممکن است نشانه ای از تعداد را داشته باشد، بخش کسری از یک نقطه جدا شده است؛

تاریخ و زمان - توصیف برچسب و باید با فرمت ISO8601 مطابقت داشته باشد. برای پردازش بیشتر در اسکریپت ها، چنین فرمت کمی ناراحت کننده است، بنابراین هنگام ارسال / دریافت پرس و جو همیشه تبدیل می شود. این می تواند یک ویژگی خاص را به عنوان بخشی از کتابخانه ایجاد کند یا نه، اگر نه، توسعه دهنده باید یک تاریخ را به صورت دستی تبدیل کند.

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

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

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

البته، کسی می گوید که چنین لیستی از انواع داده ها بسیار ضعیف است و به شما اجازه نمی دهد که به اطراف خود برگردید. " بله، اگر شما نیاز به انتقال اشیاء پیچیده و یا مقدار زیادی از داده ها، بهتر است از صابون استفاده کنید. و برای برنامه های کوچک و نامعلوم، XML-RPC به طور کامل مناسب است، علاوه بر این، اغلب حتی قابلیت های آن بیش از حد تبدیل می شود! اگر شما سهولت استقرار را در نظر بگیرید، بسیار تعداد زیادی از کتابخانه ها برای تقریبا هر زبان و سیستم عامل، پشتیبانی گسترده ای در PHP، XML-RPC اغلب به سادگی به سادگی رقبا نیست. اگر چه غیرممکن است که بلافاصله او را به عنوان یک راه حل جهانی به او توصیه کند - در هر مورد خاص لازم است که در شرایط حل شود.