Límite
Existe tal restricción en LinkedIn: el
límite de uso comercial . Es muy probable que usted, como yo, hasta hace poco, nunca lo haya visto o escuchado de él.

La esencia del límite es que si usa la búsqueda de personas fuera de sus contactos con demasiada frecuencia (no hay métricas exactas, el algoritmo decide, en función de sus acciones: con qué frecuencia buscó y agregó personas), el resultado de la búsqueda se limitará a tres perfiles, en lugar de 1000 ( 100 páginas predeterminadas, 10 perfiles por página). El límite se restablece al comienzo de cada mes. Naturalmente, las
cuentas premium no tienen esa restricción .
Pero no hace mucho tiempo, para un proyecto de mascota, comencé a jugar mucho con la búsqueda en LinkedIn y de repente obtuve esta restricción. Naturalmente, esto no me gustó mucho, porque no lo usé para ningún propósito comercial, así que lo primero que pensé fue estudiar la restricción e intentar evitarla.
[
Aclaración importante: los materiales del artículo se presentan solo con fines informativos y educativos. El autor no fomenta su uso con fines comerciales. ]
Actualización importante: LinkedIn tuvo en cuenta la vulnerabilidad y recientemente la arregló. Bypass y plugin ya no funcionan.
Estudiamos el problema
Tenemos: en lugar de diez perfiles con paginación, la búsqueda devuelve solo tres, después de lo cual se inserta un bloque con la "recomendación" de una cuenta premium y debajo hay perfiles borrosos y no seleccionables.
Inmediatamente, una mano llega a la consola del desarrollador para ver estos perfiles ocultos; tal vez podamos eliminar algunos estilos que ponen blues o extraer información del bloque en el marcado. Pero, como era de esperar, estos perfiles son solo
imágenes cortas y no almacenan ninguna información.

Ok, ahora veamos la pestaña Red y veamos si los resultados de búsqueda alternativos arrojaron que solo tres perfiles funcionan. Encontramos la consulta que nos interesa "/ api / search / blended" y miramos la respuesta.

Los perfiles vienen en la matriz 'incluida', pero ya hay 15 entidades en ella. En este caso, los tres primeros son objetos con información adicional, cada objeto contiene información sobre un perfil específico (por ejemplo, el perfil es premium).

Los siguientes 12 son perfiles reales: resultados de búsqueda, de los cuales solo se nos mostrarán tres. Como ya puede adivinar, muestra solo aquellos que reciben información adicional (los primeros tres objetos). Por ejemplo, si toma la respuesta del perfil sin límite, entonces vendrán 28 entidades, 10 objetos con ext. información y 18 perfiles.
Respuesta para perfil sin límite Por qué hay más de 10 perfiles, aunque se solicitan 10, y no participan en la visualización, incluso en la página siguiente no estarán, aún no lo sé. Si analiza la url de la solicitud, puede ver que cuenta = 10 (cuántos perfiles deben devolverse en la respuesta, máximo 49).

Estaré encantado de cualquier comentario sobre este tema.
Experimentando
Bueno, lo más importante ahora lo sabemos con certeza: más perfiles vienen en la respuesta de lo que nos muestran. Entonces podemos obtener más datos, a pesar del límite. Intentemos extraer la API nosotros mismos, directamente desde la consola, usando fetch.

Se espera que obtengamos un error 403. Esto se debe a la seguridad, aquí no enviamos un token CSRF (
CSRF en Wikipedia . En pocas palabras, se agrega un token único a cada solicitud, que se verifica en el servidor para verificar su autenticidad).

Se puede copiar desde cualquier otra solicitud exitosa o desde cookies, donde se almacena en el campo 'JSESSIONID'.
Dónde encontrar una fichaEncabezado de otra solicitud:

O desde cookies, directamente a través de la consola:

Intentamos nuevamente, esta vez pasamos la configuración a buscar, en la que especificamos nuestro token csrf como parámetro en el encabezado.

Éxito, obtenemos los 10 perfiles. : tada:
Debido a la diferencia en los encabezados, la estructura de la respuesta es ligeramente diferente de lo que viene en la solicitud original. Puede obtener la misma estructura si agrega 'Aceptar:' application / vnd.linkedin.normalized + json + 2.1 'a nuestro objeto, junto al token csrf.
Respuesta de muestra con encabezado agregado
Más información sobre el encabezado Aceptar
Que sigue
Luego puede editar (con sus manos o automatizar) el parámetro `start`, que indica el índice, a partir del cual se nos darán 10 perfiles (por defecto = 0) del resultado de búsqueda completo. En otras palabras, incrementándolo en 10 después de cada solicitud, obtenemos la paginación habitual, 10 perfiles a la vez.
En esta etapa, tenía suficientes datos y libertad para seguir trabajando en el proyecto favorito. Pero fue un pecado no tratar de mostrar estos datos en el acto, ya que están disponibles. En Ember, que se usa en la parte delantera, no subiremos. JQuery estaba conectado al sitio, y desenterrando el conocimiento de la sintaxis básica en la memoria, puede crear lo siguiente en un par de minutos.
Código 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>` ); };
Si hace esto directamente en la consola en la página de búsqueda, agregará un botón que carga 10 nuevos perfiles cada vez que hace clic y les presenta una lista. Por supuesto, token y url antes de este cambio a lo necesario. El bloque de perfil contendrá un nombre, posición, ubicación, un enlace al perfil y una imagen auxiliar.

Conclusión
Por lo tanto, con un mínimo de esfuerzo, pudimos encontrar un punto débil y recuperar nuestra búsqueda sin restricciones. Fue suficiente para analizar los datos y su ruta, para examinar la consulta en sí.
No puedo decir que este sea un problema grave para LinkedIn, porque no representa una amenaza. El máximo es la ganancia perdida debido a tales "rondas", lo que permite no pagar la prima. Quizás tal respuesta del servidor es necesaria para que las otras partes del sitio funcionen correctamente, o es simplemente la
pereza de los desarrolladores, la falta de recursos que no permite hacerlo bien. (La restricción apareció en enero de 2015, antes de que este límite no fuera así).
PS
PS antiguoNaturalmente, el código jQuery es un ejemplo bastante primitivo de características. Por el momento, he creado una extensión para que el navegador se ajuste a mis necesidades. Agrega botones de control y renderiza perfiles completos con imágenes, un botón de invitación y conexiones generales. Además, recopila dinámicamente filtros de ubicaciones, empresas y otras cosas, toma un token de las cookies. Por lo tanto, no necesita codificar nada. Bueno, agrega campos de configuración adicionales, como "cuántos perfiles solicitar a la vez, hasta 49".

Todavía estoy trabajando en este complemento y planeo ponerlo en el dominio público. Escribe si te interesa.
Por demanda popular, puse el complemento en acceso abierto, creé un complemento para el navegador y lo publiqué para uso general (gratis e incluso sin mineros). Allí, no solo se implementa la funcionalidad de límite de derivación, sino también otras comodidades.
Ver y descargar aquí -
adam4leos.imtqy.comComo se trata de una versión alfa, no dude en escribirme sobre errores, ideas e incluso una interfaz de usuario
tonta y elegante. Continúo desarrollando el complemento y publicaré periódicamente nuevas versiones.
Actualización importante: LinkedIn tuvo en cuenta la vulnerabilidad y recientemente la arregló. Bypass y plugin ya no funcionan.