[Como minha extensão recebeu muita atenção do público estrangeiro, traduzi meu artigo original para o inglês] .
Limite
Por ser uma rede profissional com a melhor classificação, o LinkedIn, infelizmente, para contas gratuitas, tem uma limitação como
Limite de Uso Comercial (CUL). Muito provavelmente, você, como eu até recentemente, nunca encontrou e nunca ouviu falar sobre isso.

O objetivo da CUL é que, quando você pesquisa pessoas fora de suas conexões / rede com muita frequência, seus resultados de pesquisa são limitados, com apenas três perfis sendo exibidos em vez de 1000 (100 páginas com 10 perfis por página, por padrão). Com que frequência é medido ninguém sabe, não há métricas precisas; o algoritmo decide com base em suas ações - com que frequência você pesquisou e quantas conexões adicionou. A CUL gratuita é redefinida à meia-noite PST no primeiro dia de cada mês e você obtém seus 1000 resultados de pesquisa novamente, para quem sabe quanto tempo. Obviamente, as
contas Premium não possuem esse limite .
No entanto, não faz muito tempo, comecei a mexer com a pesquisa do LinkedIn por algum projeto de estimação e, de repente, fiquei preso a essa CUL. Obviamente, eu não gostei muito; afinal, eu não uso a pesquisa para fins comerciais. Então, meu primeiro pensamento foi explorar esse limite e tentar contorná-lo.
[Esclarecimentos importantes - todos os materiais de origem neste artigo são apresentados apenas para fins informativos e educacionais. O autor não incentiva seu uso para fins comerciais.]
Atualização importante - o LinkedIn levou em consideração esse backdoor e, recentemente, eles o corrigiram. O backdoor e o plug-in não funcionam mais.
Estudando o problema
O que obtivemos: em vez de 10 perfis com paginação, a ferramenta de pesquisa mostra apenas 3, que são seguidos por uma "recomendação" para comprar uma conta Premium e, em seguida, você vê outros perfis desfocados não clicáveis.
O primeiro que você tem como desenvolvedor é abrir as Ferramentas do desenvolvedor do navegador para examinar esses perfis ocultos / desfocados - talvez você possa remover alguns estilos responsáveis pelo desfoque ou extrair os dados do bloco de layout / marcação. Mas, como era de se esperar, esses perfis são mostrados apenas como
imagens de espaço reservado e não contêm dados.

Ok, agora vamos a uma guia Rede e verificamos se os resultados de pesquisa alternativos realmente retornam apenas 3 perfis. Então, encontramos a consulta na qual estamos interessados - “/ api / search / blended” - e analisamos a resposta.

Os perfis estão contidos no array `included`, mas também já existem 15 entidades nele. Nesse caso, os três primeiros são os objetos com dados adicionais - cada objeto contém informações sobre um perfil específico (por exemplo, se o perfil for Premium).
Os próximos 12 perfis são reais - na verdade, são esses resultados de pesquisa, dos quais apenas três serão mostrados para nós. Como você já pode imaginar, o LinkedIn exibe apenas os perfis que receberam as informações adicionais (os três primeiros objetos). Por exemplo, se você explorar a resposta de pesquisa do perfil sem limite, serão retornadas 28 entidades - 10 objetos com informações adicionais e 18 perfis.
Resposta para um perfil sem limite Ainda não tenho certeza do motivo pelo qual são retornados mais de 10 perfis, enquanto 10 são solicitados e eles não são exibidos a um usuário - você não os verá nem na próxima página. Se você analisar o URL da solicitação, verá essa contagem = 10 (quantos perfis retornar na resposta, 49 é o máximo).

Quaisquer comentários sobre este assunto serão muito apreciados.
Experimentação
Ok, agora sabemos o mais importante com certeza - a resposta vem com mais perfis do que o LinkedIn nos mostra. Assim, podemos obter mais dados, apesar da CUL. Vamos tentar extrair a API diretamente do console, usando buscar.

Como esperado, obtemos o erro 403. Esse é um problema de segurança - aqui não enviamos um token
CSRF (
CSRF na Wikipedia ). Em poucas palavras, é um token exclusivo que é adicionado a cada solicitação, verificado no lado do servidor quanto à autenticidade.

Você pode copiá-lo de qualquer outra solicitação bem-sucedida ou de cookies, onde estiver armazenado no campo 'JSESSIONID'.
Onde encontrar um tokenTítulo de qualquer outro pedido:

A partir dos cookies, diretamente no console:

Vamos tentar de novo; desta vez, passamos as configurações para buscar. Nas configurações, especificamos nosso token CSRF como um parâmetro no cabeçalho.

Sucesso, todos os 10 perfis são retornados. : tada:
Devido à diferença nos cabeçalhos, a estrutura de resposta difere um pouco do que vem na solicitação original. Você pode obter a mesma estrutura exata se adicionar 'Accept:' application / vnd.linkedin.normalized + json + 2.1 'em nosso objeto, próximo ao token CSRF.
Amostra de uma resposta com o cabeçalho adicionado
Mais sobre o cabeçalho Accept
O que vem a seguir?
Agora você pode editar (manual ou automaticamente) o parâmetro `start` que especifica o índice, a partir do qual podemos receber 10 perfis (por padrão = 0) de todo o resultado da pesquisa. Em outras palavras, incrementando-o em 10 após cada solicitação, obtemos nossa paginação usual, 10 perfis por página.
Nesta fase, tenho dados e liberdade suficientes para continuar trabalhando no projeto pet. Mas seria um pecado não tentar exibir esses dados imediatamente, pois estavam em minhas mãos. Não vamos mergulhar no Ember usado para o frontend. Como o JQuery foi integrado no site, você pode extrair da memória o conhecimento da sintaxe básica e criar o seguinte em alguns 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>` ); };
Se você executar essas ações diretamente no console da página de pesquisa, adicionará um botão que carrega 10 novos perfis cada vez que clicar nele e os renderiza como uma lista. Obviamente, você precisará alterar um token e um URL adequadamente para os necessários. O bloco de perfil conterá um nome, cargo, local, um link para o perfil e uma imagem de espaço reservado.

Conclusão
Portanto, com o mínimo de esforço, conseguimos encontrar um ponto fraco e recuperar nossa opção de pesquisa sem limitações. Foi o suficiente para analisar os dados e seu caminho e analisar a própria consulta.
Não posso dizer que esse é um problema sério para o LinkedIn, pois não representa ameaça. O pior que pode acontecer é uma perda de lucro devido a esse "desvio", que permite que você não compre uma conta Premium. Talvez a resposta desse servidor seja necessária para que as outras partes do site funcionem corretamente, ou isso é simplesmente a preguiça da falta de recursos dos desenvolvedores, o que não permite um desempenho melhor (a CUL apareceu em janeiro de 2015, antes que não houvesse limite. de todo).
PS
Ps antigoClaro, o código jQuery é um exemplo bastante primitivo de recursos. Atualmente, criei uma extensão do navegador para atender às minhas necessidades. Ele adiciona botões de controle e renderiza perfis completos com fotos, um botão de convite e conexões mútuas. Além disso, coleta dinamicamente filtros de locais, empresas e outras coisas e extrai um token dos cookies. Então você não precisa codificar nada. Além disso, a extensão adiciona campos de configurações adicionais, por exemplo, "quantos perfis solicitar de uma vez, até 49".

Ainda estou trabalhando nessa extensão e pretendo disponibilizá-la ao público.
Envie-me uma mensagem se estiver interessado.
Pela demanda popular de lançar essa extensão como produto de código aberto, criei uma extensão do navegador e a publiquei para uso público (gratuito e mesmo sem mineradores). Ele possui não apenas a funcionalidade de desvio de limite, mas também alguns outros recursos. Você pode dar uma olhada e fazer o download aqui -
adam4leos.imtqy.comComo esta é uma versão alfa, não hesite em me avisar sobre bugs, suas idéias ou até mesmo sobre um
UI legal chapado. Continuo melhorando a extensão e publicarei novas versões periodicamente.
Atualização importante - o LinkedIn levou em consideração esse backdoor e, recentemente, eles o corrigiram. O backdoor e o plug-in não funcionam mais.