Limit
Es gibt eine solche Einschränkung für LinkedIn -
Commercial Use Limit Es ist sehr wahrscheinlich, dass Sie, wie ich, bis vor kurzem noch nie auf ihn gestoßen sind oder von ihm gehört haben.

Das Wesentliche des Limits ist, dass das Suchergebnis auf drei statt auf 1000 Profile beschränkt wird, wenn Sie die Personensuche zu oft außerhalb Ihrer Kontakte verwenden (es gibt keine genauen Metriken, der Algorithmus entscheidet basierend auf Ihren Aktionen - wie oft Sie Personen gesucht und hinzugefügt haben). Standard 100 Seiten, 10 Profile pro Seite). Das Limit wird zu Beginn eines jeden Monats zurückgesetzt. Natürlich haben
Premium-Konten keine solche Einschränkung .
Aber vor nicht allzu langer Zeit begann ich für ein Haustierprojekt viel mit der Suche auf LinkedIn zu spielen und bekam plötzlich diese Einschränkung. Das hat mir natürlich nicht besonders gut gefallen, weil ich es nicht für kommerzielle Zwecke verwendet habe. Der erste Gedanke war also, die Einschränkung zu studieren und zu versuchen, sie zu umgehen.
[
Wichtige Klarstellung - Die Materialien im Artikel dienen nur zu Informations- und Bildungszwecken. Der Autor empfiehlt nicht, sie für kommerzielle Zwecke zu verwenden. ]]
Wichtiges Update - LinkedIn hat die Sicherheitsanfälligkeit berücksichtigt und kürzlich behoben. Bypass und Plugin funktionieren nicht mehr.
Wir untersuchen das Problem
Wir haben: Anstelle von zehn Profilen mit Paginierung gibt die Suche nur drei zurück. Danach wird ein Block mit der „Empfehlung“ eines Premium-Kontos eingefügt und unten sind verschwommene und nicht anklickbare Profile.
Sofort greift eine Hand in die Entwicklerkonsole, um diese versteckten Profile anzuzeigen. Vielleicht können wir einige Stile entfernen, die Blues einfügen, oder Informationen aus dem Block im Markup extrahieren. Wie erwartet sind diese Profile jedoch nur
Stichbilder und speichern keine Informationen.

Ok, schauen wir uns jetzt die Registerkarte Netzwerk an und sehen, ob die alternativen Suchergebnisse zurückgegeben werden, die nur drei Profile zurückgeben. Wir finden die für uns interessante Anfrage "/ api / search / blended" und sehen uns die Antwort an.

Profile kommen in das Array "eingeschlossen", aber es sind bereits 15 Entitäten darin. In diesem Fall sind die ersten drei Objekte Objekte mit zusätzlichen Informationen. Jedes Objekt enthält Informationen zu einem bestimmten Profil (z. B. ist das Profil eine Prämie).

Die nächsten 12 sind echte Profile - Suchergebnisse, von denen uns nur drei angezeigt werden. Wie Sie bereits erraten können, werden nur diejenigen angezeigt, die zusätzliche Informationen erhalten (die ersten drei Objekte). Wenn Sie beispielsweise die Antwort unbegrenzt aus dem Profil übernehmen, werden 28 Entitäten angezeigt - 10 Objekte mit ext. Informationen und 18 Profile.
Antwort für Profil ohne Limit Warum es mehr als 10 Profile gibt, obwohl 10 angefordert werden und sie nicht an der Anzeige teilnehmen, werden sie auch auf der nächsten Seite nicht angezeigt - ich weiß es noch nicht. Wenn Sie die URL der Anforderung analysieren, sehen Sie, dass count = 10 ist (wie viele Profile in der Antwort zurückgegeben werden sollen, maximal 49).

Ich freue mich über Kommentare zu diesem Thema.
Experimentieren
Nun, das Wichtigste, was wir jetzt sicher wissen - es kommen mehr Profile in die Antwort, als sie uns zeigen. So können wir trotz des Limits mehr Daten erhalten. Lassen Sie uns versuchen, die API mit Fetch direkt von der Konsole zu ziehen.

Es wird erwartet, dass wir einen Fehler 403 erhalten. Dies ist aus Sicherheitsgründen, hier senden wir kein CSRF-Token (
CSRF auf Wikipedia .
Kurz gesagt, jeder Anforderung wird ein eindeutiges Token hinzugefügt, das auf dem Server auf Authentizität überprüft wird).

Es kann von jeder anderen erfolgreichen Anfrage oder von Cookies kopiert werden, wo es im Feld 'JSESSIONID' gespeichert ist.
Wo finde ich einen Token?Header einer anderen Anfrage:

Oder von Cookies direkt über die Konsole:

Wir versuchen es erneut, diesmal übergeben wir die Einstellungen zum Abrufen, in denen wir unser csrf-Token als Parameter im Header angeben.

Erfolg, wir bekommen alle 10 Profile. : tada:
Aufgrund der unterschiedlichen Überschriften unterscheidet sich die Struktur der Antwort geringfügig von der ursprünglichen Anforderung. Sie können dieselbe Struktur erhalten, wenn Sie unserem Objekt neben dem csrf-Token 'Accept:' application / vnd.linkedin.normalized + json + 2.1 'hinzufügen.
Beispielantwort mit hinzugefügtem Header
Mehr zum Accept Header
Was weiter?
Anschließend können Sie den Parameter "start" (mit Ihren Händen oder automatisieren) bearbeiten und den Index angeben, ab dem wir 10 Profile (Standard = 0) aus dem gesamten Suchergebnis erhalten. Mit anderen Worten, wenn wir es nach jeder Anfrage um 10 erhöhen, erhalten wir die übliche Paginierung, 10 Profile gleichzeitig.
Zu diesem Zeitpunkt hatte ich genug Daten und Freiheit, um weiter an dem Haustierprojekt zu arbeiten. Es war jedoch eine Sünde, nicht zu versuchen, diese Daten direkt vor Ort anzuzeigen, da sie verfügbar sind. In Ember, das vorne benutzt wird, werden wir nicht klettern. JQuery war mit der Site verbunden, und wenn Sie das Wissen über die grundlegende Syntax im Speicher kennen, können Sie in wenigen Minuten Folgendes erstellen.
JQuery-Code 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>` ); };
Wenn Sie dies direkt in der Konsole auf der Suchseite tun, wird eine Schaltfläche hinzugefügt, die bei jedem Klicken 10 neue Profile lädt und eine Liste rendert. Natürlich ändern sich Token und URL vor dieser Änderung auf das Notwendige. Der Profilblock enthält einen Namen, eine Position, einen Ort, einen Link zum Profil und ein Stub-Bild.

Fazit
So konnten wir mit minimalem Aufwand eine Schwachstelle finden und unsere Suche ohne Einschränkungen wieder aufnehmen. Es genügte, die Daten und ihren Pfad zu analysieren und die Abfrage selbst zu untersuchen.
Ich kann nicht sagen, dass dies ein ernstes Problem für LinkedIn ist, da es keine Bedrohung darstellt. Das Maximum ist der entgangene Gewinn aufgrund solcher "Runden", die es erlauben, die Prämie nicht zu bezahlen. Möglicherweise ist eine solche Serverantwort erforderlich, damit die anderen Teile der Site ordnungsgemäß funktionieren, oder ist dies einfach
Faulheit der Entwickler, ein Mangel an Ressourcen, die es nicht ermöglichen, gute Ergebnisse zu erzielen. (Die Einschränkung trat im Januar 2015 auf, bevor diese Grenze nicht erreicht wurde).
PS
Alte PSNatürlich ist jQuery-Code ein eher primitives Beispiel für Funktionen. Im Moment habe ich eine Erweiterung für den Browser erstellt, die meinen Anforderungen entspricht. Es fügt Steuerschaltflächen hinzu und rendert vollständige Profile mit Bildern, einer Einladungsschaltfläche und allgemeinen Verbindungen. Außerdem sammelt es dynamisch Filter von Standorten, Unternehmen und anderen Dingen und nimmt ein Token von Cookies. Sie müssen also nichts fest codieren. Nun, es werden zusätzliche Einstellungsfelder hinzugefügt, a la "wie viele Profile gleichzeitig angefordert werden sollen, bis zu 49."

Ich arbeite noch an diesem Add-On und plane, es öffentlich zugänglich zu machen. Schreiben Sie, wenn Sie interessiert sind.
Auf vielfachen Wunsch habe ich das Add-On in Open Access gestellt, ein Add-On für den Browser erstellt und es für den allgemeinen Gebrauch veröffentlicht (kostenlos und sogar ohne Miner). Dort wird nicht nur die Bypass-Funktionalität eingeschränkt, sondern auch andere Annehmlichkeiten implementiert. Hier
ansehen und herunterladen -
adam4leos.imtqy.comDa es sich um eine Alpha-Version handelt, können Sie mir gerne über Fehler, Ideen und sogar eine
blöde, schicke Benutzeroberfläche schreiben. Ich entwickle das Add-On weiter und werde regelmäßig neue Versionen veröffentlichen.
Wichtiges Update - LinkedIn hat die Sicherheitsanfälligkeit berücksichtigt und kürzlich behoben. Bypass und Plugin funktionieren nicht mehr.