Bonjour,

Je tiens dans un premier temps à remercier la communauté Developpez.com pour le super boulot que vous avez offert à la communauté française ^^
Et dans un deuxième temps à vous encourager à lire mes quelques bouts de code, car je galère depuis trois jours... Merci d'avance aux curieux.

Je suis un étudiant en géographie et je souhaite constituer une base de donnée des plus grosses entreprises en géolocalisant leur siège social. Par chance, linkedin contient ce genre d'information.
Malheureusement je n'ai pas réussi jusqu'à présent à utiliser cUrl.


I. Connexion manuelle

Je me rends à cette adresse https://www.linkedin.com/uas/login
Je rentre mon E-Mail, mon Mot de passe et clique sur S'identifier.

FireBug m'indique que le formulaire est soumis à https://www.linkedin.com/uas/login-submit avec ces informations :

a) Header
(demandez moi si besoin)

b) Post
isJsEnabled=false
&source_app=
&session_key=tamazyy%40laposte.net
&session_password=PASSWORD
&signin=S%27identifier
&session_redirect=
&hr=
&csrfToken=ajax%3A1695277286060700152
&sourceAlias=0_7r5yezRXCiA_H0CRD8sf6DhOjTKUNps5xGTqeX8EEoi

c) Cookies
(demandez moi si besoin)
Puis je suis redirigé vers http://www.linkedin.com/nhome/


II. Connexion avec cUrl

a) Récupération de csrfToken sur /login
Sa valeur change à chaque chargement de page
(je récupère aussi sourceAlias, car je ne sais pas trop ce que c'est et si ça peut changer)

b) Envoie en POST sur /login-submit

c) Récupération de la page /nhome




Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
require_once('./cUrl-linkedin/include/SimpleHtmlDom/simple_html_dom.php');
session_start();
 
/** On récupère csrfTokenValue et sourceAliasValue **/
 
$html = file_get_html("https://www.linkedin.com/uas/login");
foreach($html->find('input#csrfToken-login') as $e)
    $csrfTokenValue = $e->value;
foreach($html->find('input#sourceAlias-login') as $e)
    $sourceAliasValue = $e->value;
 
//echo "<h5>".$csrfTokenValue."</h5>";
//echo "<h5>".$sourceAliasValue."</h5>";
 
/** On se connecte à linked in **/
 
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://www.linkedin.com/uas/login-submit');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//cookie
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
$path_cookie = 'cookie.txt';
if (!file_exists(realpath($path_cookie))) touch($path_cookie);
curl_setopt($curl, CURLOPT_COOKIEJAR, realpath($path_cookie));
//proxy
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($curl, CURLOPT_PROXY, "195.229.241.17:8080");
//useragent	
$user_agent = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11';
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);
//post
curl_setopt($curl, CURLOPT_POST, true);
$postfields = array(
 'csrfToken' => $csrfTokenValue,
 'hr' => '',
 'isJsEnabled' => 'false',			
 'session_key' => 'tamazyy@laposte.net',
 'session_password' => PASSWORD,
 'session_redirect' => '',
 'signin' => 'S%27identifier',
 'sourceAlias' => $sourceAliasValue,
 'source_app' => ''
);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
 
curl_exec($curl);
 
/** On essaye d'acceder a nhome **/
 
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.linkedin.com/nhome');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//cookie
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
$path_cookie = 'cookie.txt';
curl_setopt($curl, CURLOPT_COOKIEFILE, realpath($path_cookie));
//proxy
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($curl, CURLOPT_PROXY, "195.229.241.17:8080");
//useragent
$user_agent = 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11';
curl_setopt($curl, CURLOPT_USERAGENT, $user_agent);
//post
curl_setopt($curl, CURLOPT_POST, true);
$postfields = array( 
 'csrfToken' => $csrfTokenValue,
 'hr' => '',
 'isJsEnabled' => 'false',			
 'session_key' => 'tamazyy@laposte.net',
 'session_password' => PASSWORD,
 'session_redirect' => '',
 'signin' => 'S%27identifier',
 'sourceAlias' => $sourceAliasValue,
 'source_app' => ''
						);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
 
echo "->".curl_exec($curl)."<-";

III. Ce qui pose problème

echo "->".curl_exec($curl)."<-";
récupère la page http://www.linkedin.com/nhome/, sauf que celle ci n'est pas "logué"...

Pourtant mon fichier 'cookie.txt' existe bien et contient :
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

www.linkedin.com FALSE / FALSE 10 _lipt deleteMe
.linkedin.com TRUE / FALSE 1428270099 bcookie "v=2&88e40145-bec6-45de-a8d0-908dd956b6b2"
www.linkedin.com FALSE / FALSE 1365199898 leo_auth_token "GST:8janSHbehIGIitw5-s1P5oSA9syAcwtPxt5nAgbjp7DfYGy5fz_wdO:1365198099:8b93a3cafb053032da7b35317a6f9335190d8a6a"
.www.linkedin.com TRUE / FALSE 10 sl "delete me"
www.linkedin.com FALSE / FALSE 10 s_leo_auth_token "delete me"
www.linkedin.com FALSE / FALSE 0 JSESSIONID "ajax:9172917238158666847"
www.linkedin.com FALSE / FALSE 1428270099 visit "v=1&G"
.linkedin.com TRUE / FALSE 0 lang "v=2&lang=en-us"
www.linkedin.com FALSE /uas/ FALSE 0 X-LI-IDC C1
www.linkedin.com FALSE / FALSE 0 X-LI-IDC C1