[نظرًا لأن ملحقي قد حظي باهتمام كبير من الجمهور الأجنبي ، قمت بترجمة مقالتي الأصلية إلى الإنجليزية] .
حد
كونها شبكة احترافية عالية الجودة ، فإن LinkedIn ، لسوء الحظ ، بالنسبة للحسابات المجانية ، لديها قيود مثل
حد الاستخدام التجاري (CUL). على الأرجح ، أنت ، مثلي حتى وقت قريب ، لم تصادف أبداً ولم تسمع أبدًا بهذا الشيء.

الهدف من CUL هو أنه عند البحث عن أشخاص خارج اتصالاتك / شبكتك بشكل متكرر ، ستقتصر نتائج البحث على 3 ملفات شخصية فقط تظهر بدلاً من 1000 (100 صفحة مع 10 ملفات تعريف لكل صفحة افتراضيًا). كيف "في كثير من الأحيان" يقاس لا أحد يعرف ، لا توجد مقاييس دقيقة. تقرر الخوارزمية ذلك استنادًا إلى تصرفاتك - عدد المرات التي تبحث فيها وعدد الاتصالات التي تضيفها. تتم إعادة تعيين CUL المجانية في منتصف الليل بتوقيت المحيط الهادي في الأول من كل شهر ، وستحصل على 1000 نتائج بحث مرة أخرى ، لمن يعرف المدة. بالطبع ،
حسابات بريميوم ليس لديها مثل هذا الحد في المكان .
ومع ذلك ، منذ وقت ليس ببعيد ، بدأت العبث مع بحث LinkedIn عن مشروع للحيوانات الأليفة ، وفجأة تعثرت مع CUL. من الواضح ، لم يعجبني كثيرًا ؛ بعد كل شيء ، لم أستخدم البحث عن أي أغراض تجارية. لذلك ، كانت فكرتي الأولى هي استكشاف هذا الحد ومحاولة تجاوزه.
[توضيح مهم - يتم تقديم جميع المواد المصدر في هذه المقالة فقط لأغراض إعلامية وتعليمية. المؤلف لا يشجع استخدامها لأغراض تجارية.]
تحديث مهم - أخذ LinkedIn في الاعتبار هذا الباب الخلفي ومؤخرًا قاموا بإصلاحه. مستتر والبرنامج المساعد لا تعمل بعد الآن.
دراسة المشكلة
ما حصلنا عليه: بدلاً من 10 ملفات شخصية مع ترقيم الصفحات ، تظهر أداة البحث 3 فقط ، تليها "توصية" لشراء حساب Premium ومن ثم ترى ملفات شخصية غير واضحة وغير واضحة.
أول ما يكون لديك كمطور هو فتح Browser Developer Tools لفحص ملفات التعريف المخفية / غير الواضحة هذه - ربما يمكنك إزالة بعض الأنماط المسؤولة عن التمويه ، أو استخراج البيانات من كتلة التخطيط / العلامات. ولكن ، كما هو متوقع ، يتم عرض ملفات التعريف هذه
كصور نائب فقط ولا تحتوي على أي بيانات.

حسنًا ، دعنا الآن نذهب إلى علامة تبويب "الشبكة" ونتحقق مما إذا كانت نتائج البحث البديلة لا تعرض سوى 3 ملفات شخصية فقط. لذلك ، نجد الاستعلام الذي يهمنا - "/ api / search / blended" - وننظر في الرد.

توجد ملفات التعريف في الصفيف "المضمّن" ، ولكن يوجد أيضًا 15 كيانًا فيها. في هذه الحالة ، أول 3 منها هي الكائنات التي تحتوي على بيانات إضافية - يحتوي كل كائن على معلومات حول ملف تعريف معين (على سبيل المثال ، إذا كان ملف التعريف هو Premium واحد).
ملفات التعريف الـ 12 التالية حقيقية - إنها في الواقع نتائج البحث هذه ، منها 3 فقط سيتم عرضها لنا. كما يمكنك بالفعل تخمين ، يعرض LinkedIn ملفات التعريف التي تلقت المعلومات الإضافية فقط (الكائنات الثلاثة الأولى). على سبيل المثال ، إذا قمت باستكشاف استجابة البحث من الملف الشخصي دون حد ، فسيتم إرجاع 28 كيانًا - 10 كائنات تحتوي على معلومات إضافية و 18 ملفًا شخصيًا.
استجابة لملف تعريف دون حد لست متأكدًا بعد من السبب وراء إرجاع أكثر من 10 ملفات شخصية ، بينما يتم طلب 10 ملفات شخصية ، ولا يتم عرضها للمستخدم - فلن تراها حتى في الصفحة التالية. إذا قمت بتحليل عنوان URL للطلب ، فستشاهد هذا العدد = 10 (عدد الملفات الشخصية التي يجب إرجاعها في الرد ، 49 هو الحد الأقصى).

أي تعليقات على هذا الموضوع سيكون موضع تقدير كبير.
تجارب
حسنًا ، نحن الآن نعرف أن الشيء الأكثر أهمية بالتأكيد - يأتي الرد مع ملفات تعريف أكثر مما يوضح لنا LinkedIn. لذلك ، يمكننا الحصول على المزيد من البيانات ، على الرغم من CUL. دعونا نحاول سحب واجهة برمجة التطبيقات (API) بأنفسنا من وحدة التحكم مباشرةً ، باستخدام الجلب.

كما هو متوقع ، حصلنا على الخطأ 403. هذه مشكلة أمان - هنا لا نرسل رمز مميز لـ
CSRF (
CSRF على Wikipedia ). باختصار ، إنه رمز مميز فريد يضاف إلى كل طلب يتم التحقق منه من جانب الخادم للتأكد من صحته.

يمكنك نسخه من أي طلب ناجح آخر أو من ملفات تعريف الارتباط ، حيث يتم تخزينه في حقل "JSESSIONID".
أين تجد رمزعنوان أي طلب آخر:

من ملفات تعريف الارتباط ، من خلال وحدة التحكم مباشرة:

دعونا نحاول مرة أخرى ؛ هذه المرة ، نقوم بتمرير الإعدادات لجلب. في الإعدادات ، نحدد الرمز CSRF الخاص بنا كمعلمة في الرأس.

النجاح ، يتم إرجاع جميع التشكيلات 10. : تادا:
بسبب الاختلاف في الرؤوس ، تختلف بنية الاستجابة قليلاً عن ما يأتي في الطلب الأصلي. يمكنك الحصول على نفس البنية الدقيقة إذا أضفت "قبول:" application / vnd.linkedin.normalized + json + 2.1 "في كائننا ، بجوار رمز CSRF.
عينة من استجابة مع رأس المضافة
المزيد عن قبول الرأس
ما التالي؟
يمكنك الآن تحرير (يدويًا أو تلقائيًا) المعلمة `start` التي تحدد الفهرس ، بدءًا من حيث يمكننا استلام 10 ملفات شخصية (افتراضيًا = 0) من نتيجة البحث بأكملها. وبعبارة أخرى ، بزيادة هذا الرقم بمقدار 10 بعد كل طلب ، نحصل على ترقيم الصفحات المعتاد ، 10 ملفات تعريف لكل صفحة.
في هذه المرحلة ، لديّ بيانات وحرية كافية لمواصلة العمل في مشروع الحيوانات الأليفة. ولكن سيكون من الخطيئة عدم محاولة عرض هذه البيانات على الفور لأنها كانت في يدي. لن نغوص في الإمبراطور المستخدم للواجهة الأمامية. نظرًا لأن JQuery مدمج على موقع الويب ، فيمكنك اكتشاف معرفة بناء الجملة الأساسية من الذاكرة الخاصة بك وإنشاء ما يلي في بضع دقائق.
كود مسج const createProfileBlock = ({ headline, publicIdentifier, subline, title }) => { $('.search-results__list').append( `<li class="search-result search-result__occluded-item ember-view"> <div class="search-entity search-result search-result--person search-result--occlusion-enabled ember-view"> <div class="search-result__wrapper"> <div class="search-result__image-wrapper"> <a class="search-result__result-link ember-view" href="/in/${publicIdentifier}/"> <figure class="search-result__image"> <div class="ivm-image-view-model ember-view"> <img class="lazy-image ivm-view-attr__img--centered EntityPhoto-circle-4 presence-entity__image EntityPhoto-circle-4 loaded" src="http://www.userlogos.org/files/logos/give/Habrahabr3.png" /> </div> </figure> </a> </div> <div class="search-result__info pt3 pb4 ph0"> <a class="search-result__result-link ember-view" href="/in/${publicIdentifier}/"> <h3 class="actor-name-with-distance search-result__title single-line-truncate ember-view"> ${title.text} </h3> </a> <p class="subline-level-1 t-14 t-black t-normal search-result__truncate">${headline.text}</p> <p class="subline-level-2 t-12 t-black--light t-normal search-result__truncate">${subline.text}</p> </div> </div> </div> <li>` ); };
إذا قمت بهذه الإجراءات مباشرةً في وحدة التحكم في صفحة البحث ، فستقوم بإضافة زر يقوم بتحميل 10 ملفات تعريف جديدة في كل مرة تنقر فوقها ، ويجعلها كقائمة. بالطبع ، سيتعين عليك تغيير الرمز المميز وعنوان URL بشكل مناسب إلى الرموز الضرورية. ستتضمن كتلة ملف التعريف اسمًا وموقعًا وظيفيًا وموقعًا ورابطًا لملف التعريف وصورة عنصر نائب.

استنتاج
لذلك ، وبأقل جهد ممكن ، تمكنا من العثور على نقطة ضعيفة واستعادة خيار البحث الخاص بنا دون أي قيود. كان يكفي لتحليل البيانات ومسارها والنظر في الاستعلام نفسه.
لا يمكنني القول إن هذه مشكلة خطيرة لـ LinkedIn لأنها لا تمثل أي تهديد. أسوأ ما يمكن أن يحدث هو خسارة في الأرباح بسبب "التجاوز" الذي يسمح لك بعدم شراء حساب Premium. ربما تكون استجابة هذا الخادم ضرورية للأجزاء الأخرى من الموقع للعمل بشكل صحيح ، أو هذا ببساطة كسل المطورين في قلة الموارد ، مما لا يسمح بعمل أفضل (ظهر CUL في يناير 2015 ، قبل عدم وجود حد على الإطلاق).
PS
سكرتير خاص قديمبالتأكيد ، كود jQuery هو مثال بدائي جميل للقدرات. حاليًا ، قمتُ بإنشاء امتداد للمتصفح ليلائم احتياجاتي. ويضيف أزرار التحكم ويعرض ملفات تعريف كاملة الميزات مع الصور ، وزر الدعوة ، والاتصالات المتبادلة. بالإضافة إلى ذلك ، فهو يجمع بشكل حيوي عوامل تصفية المواقع والشركات والأشياء الأخرى ، ويسحب رمزًا مميزًا من ملفات تعريف الارتباط. لذلك لم يكن لديك لترميز أي شيء. أيضًا ، يضيف الامتداد حقول إعدادات إضافية ، على سبيل المثال "كم عدد الملفات الشخصية المطلوب طلبها مرة واحدة ، وحتى 49."

ما زلت أعمل على هذا الامتداد ، وأخطط لإتاحته للجمهور.
رسالة لي إذا كنت مهتما.
بناءً على الطلب الشائع لإصدار هذا الامتداد كمنتج مفتوح المصدر ، قمتُ بإنشاء امتداد للمتصفح ونشره للاستخدام العام (مجانًا وحتى بدون عمال مناجم). ليس فقط وظائف تجاوز الحد ولكن أيضا بعض الميزات الأخرى. يمكنك إلقاء نظرة عليه وتنزيله هنا -
adam4leos.imtqy.comنظرًا لأن هذا إصدار ألفا ، فلا تتردد في إعلامي عن الأخطاء أو أفكارك أو حتى حول
رجم UI بارد. أستمر في تحسين الامتداد وسأنشر إصدارات جديدة من وقت لآخر.
تحديث مهم - أخذ LinkedIn في الاعتبار هذا الباب الخلفي ومؤخرًا قاموا بإصلاحه. مستتر والبرنامج المساعد لا تعمل بعد الآن.