Zrobiłem sobie skrypt, który loguje się na stronie menadżer sprzedaży allegro (ms.allegro.pl)
Używają tam tokena, ale skrypt przez logowaniem go sobie pobiera i używa w zapytaniu CURL.
I skrypt działa świetnie ale tylko na localhost. Jak go wrzucam na serwer to niestety nie działa. Nie mam pojęcie co jest nie tak...
Ktoś z was poradzi?
Oto kod:
// options $EMAIL = 'XXXXX'; $PASSWORD = 'YYYYYYYY'; $cookie_file_path = "cookies.txt"; $LOGINURL = "https://ms.allegro.pl/account/checklogin/"; $wyloguj = "https://ms.allegro.pl/account/logout/"; $agent = "Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)"; // begin script $ch = curl_init(); // extra headers $headers[] = "Accept: */*"; $headers[] = "Connection: Keep-Alive"; // Wylogowuje sie curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_URL, $wyloguj); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); // execute session to get cookies and required form inputs $content = curl_exec($ch); // loguje się curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); curl_setopt($ch, CURLOPT_URL, $LOGINURL); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); // execute session to get cookies and required form inputs $content = curl_exec($ch); //var_dump($content); //$fields = getInputs($content); $result = preg_match('/<input class="token Token" type="hidden" style="display: none" name="token_Token" value="(.*?)"/', $content, $matches); if(!$result){ $fields['token_Token']="Nie znalazłem"; } else { // Input value found $fields['token_Token3']=$matches[1]; } $fields['login-user[login]'] = $EMAIL; $fields['login-user[password]'] = $PASSWORD; //echo '<pre>'; //print_r($fields); //echo '</pre>'; $LOGINURL = "https://ms.allegro.pl/account/checklogin/"; // set postfields using what we extracted from the form $POSTFIELDS = http_build_query($fields); // change URL to login URL curl_setopt($ch, CURLOPT_URL, $LOGINURL); // set post options curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS); // perform login $result = curl_exec($ch);
sprawdzam sobie wynik zapytań na local i serwerze i są różnice:
na local
logowanie ( [url] => <a href="https://ms.allegro.pl/account/login/" target="_blank">https://ms.allegro.pl/account/login/</a> [content_type] => text/html; charset=utf-8 [http_code] => 200 [header_size] => 531 [request_size] => 283 [filetime] => -1 [ssl_verify_result] => 20 [redirect_count] => 0 [total_time] => 0.093 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 0 [size_download] => 7369 [speed_download] => 79236 [speed_upload] => 0 [download_content_length] => 7369 [upload_content_length] => -1 [starttransfer_time] => 0.093 [redirect_time] => 0 [redirect_url] => [primary_ip] => 185.31.24.105 ( ) [primary_port] => 443 [local_ip] => 192.168.0.26 [local_port] => 53228 )
a na serwerze
( [url] => <a href="https://ms.allegro.pl/account/login/" target="_blank">https://ms.allegro.pl/account/login/</a> [content_type] => text/html; charset=utf-8 [http_code] => 200 [header_size] => 531 [request_size] => 272 [filetime] => -1 [ssl_verify_result] => 20 [redirect_count] => 0 [total_time] => 0.082395 [namelookup_time] => 1.5E-5 [connect_time] => 1.8E-5 [pretransfer_time] => 1.9E-5 [size_upload] => 0 [size_download] => 7369 [speed_download] => 89435 [speed_upload] => 0 [download_content_length] => 7369 [upload_content_length] => 0 [starttransfer_time] => 0.082185 [redirect_time] => 0 [redirect_url] => [primary_ip] => 185.31.24.105 ( ) [primary_port] => 0 [local_ip] => [local_port] => 0 )
jak widać certinfo jest puste na serwerze, co może być tego powodem?