Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie za pomocą CURL na ms.allegro.pl
Forum PHP.pl > Forum > PHP
Avatarus
Witam
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:

  1. // options
  2. $EMAIL = 'XXXXX';
  3. $PASSWORD = 'YYYYYYYY';
  4. $cookie_file_path = "cookies.txt";
  5. $LOGINURL = "https://ms.allegro.pl/account/checklogin/";
  6. $wyloguj = "https://ms.allegro.pl/account/logout/";
  7. $agent = "Nokia-Communicator-WWW-Browser/2.0 (Geos 3.0 Nokia-9000i)";
  8. // begin script
  9. $ch = curl_init();
  10. // extra headers
  11. $headers[] = "Accept: */*";
  12. $headers[] = "Connection: Keep-Alive";
  13. // Wylogowuje sie
  14. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  15. curl_setopt($ch, CURLOPT_HEADER, 0);
  16. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  17. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  18. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  20. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  21. curl_setopt($ch, CURLOPT_HTTPGET, true);
  22. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  23. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
  24. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
  25. curl_setopt($ch, CURLOPT_URL, $wyloguj);
  26. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  27. curl_setopt($ch, CURLOPT_VERBOSE, true);
  28. curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  29. // execute session to get cookies and required form inputs
  30. $content = curl_exec($ch);
  31. print $content;
  32. echo curl_error ($ch);
  33. // loguje się
  34. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  35. curl_setopt($ch, CURLOPT_HEADER, 0);
  36. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
  37. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  38. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  39. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  40. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  41. curl_setopt($ch, CURLOPT_HTTPGET, true);
  42. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
  43. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
  44. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
  45. curl_setopt($ch, CURLOPT_URL, $LOGINURL);
  46. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  47. curl_setopt($ch, CURLOPT_VERBOSE, true);
  48. curl_setopt($ch, CURLOPT_TIMEOUT, 20);
  49. // execute session to get cookies and required form inputs
  50. $content = curl_exec($ch);
  51. echo curl_error ($ch);
  52. //var_dump($content);
  53. //$fields = getInputs($content);
  54. $result = preg_match('/<input class="token Token" type="hidden" style="display: none" name="token_Token" value="(.*?)"/', $content, $matches);
  55. if(!$result){
  56. $fields['token_Token']="Nie znalazłem";
  57. } else {
  58. // Input value found
  59. $fields['token_Token3']=$matches[1];
  60. }
  61. $fields['login-user[login]'] = $EMAIL;
  62. $fields['login-user[password]'] = $PASSWORD;
  63. //echo '<pre>';
  64. //print_r($fields);
  65. //echo '</pre>';
  66.  
  67. $LOGINURL = "https://ms.allegro.pl/account/checklogin/";
  68. // set postfields using what we extracted from the form
  69. $POSTFIELDS = http_build_query($fields);
  70. // change URL to login URL
  71. curl_setopt($ch, CURLOPT_URL, $LOGINURL);
  72. // set post options
  73. curl_setopt($ch, CURLOPT_POST, 1);
  74. curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
  75. // perform login
  76. $result = curl_exec($ch);
  77. print $result; //wyswietla strone
  78.  
  79.  
  80. $result2 = preg_match('/Sprzedane <span>(.*?)</', $result, $matches2);
  81. $vowels = array("(", ")");
  82. $allegro = intval(str_replace($vowels, "", $matches2[1]));


sprawdzam sobie wynik zapytań na local i serwerze i są różnice:
na local

  1. logowanie
  2. (
  3. [url] => <a href="https://ms.allegro.pl/account/login/" target="_blank">https://ms.allegro.pl/account/login/</a>
  4. [content_type] => text/html; charset=utf-8
  5. [http_code] => 200
  6. [header_size] => 531
  7. [request_size] => 283
  8. [filetime] => -1
  9. [ssl_verify_result] => 20
  10. [redirect_count] => 0
  11. [total_time] => 0.093
  12. [namelookup_time] => 0
  13. [connect_time] => 0
  14. [pretransfer_time] => 0
  15. [size_upload] => 0
  16. [size_download] => 7369
  17. [speed_download] => 79236
  18. [speed_upload] => 0
  19. [download_content_length] => 7369
  20. [upload_content_length] => -1
  21. [starttransfer_time] => 0.093
  22. [redirect_time] => 0
  23. [redirect_url] =>
  24. [primary_ip] => 185.31.24.105
  25. [certinfo] => Array
  26. (
  27. )
  28.  
  29. [primary_port] => 443
  30. [local_ip] => 192.168.0.26
  31. [local_port] => 53228
  32. )


a na serwerze

  1. (
  2. [url] => <a href="https://ms.allegro.pl/account/login/" target="_blank">https://ms.allegro.pl/account/login/</a>
  3. [content_type] => text/html; charset=utf-8
  4. [http_code] => 200
  5. [header_size] => 531
  6. [request_size] => 272
  7. [filetime] => -1
  8. [ssl_verify_result] => 20
  9. [redirect_count] => 0
  10. [total_time] => 0.082395
  11. [namelookup_time] => 1.5E-5
  12. [connect_time] => 1.8E-5
  13. [pretransfer_time] => 1.9E-5
  14. [size_upload] => 0
  15. [size_download] => 7369
  16. [speed_download] => 89435
  17. [speed_upload] => 0
  18. [download_content_length] => 7369
  19. [upload_content_length] => 0
  20. [starttransfer_time] => 0.082185
  21. [redirect_time] => 0
  22. [redirect_url] =>
  23. [primary_ip] => 185.31.24.105
  24. [certinfo] => Array
  25. (
  26. )
  27.  
  28. [primary_port] => 0
  29. [local_ip] =>
  30. [local_port] => 0
  31. )


jak widać certinfo jest puste na serwerze, co może być tego powodem?
Tomplus
A nie lepiej korzystać z WebAPI od Allegro?
https://developer.allegroapi.io/

Tutaj są już gotowe rozwiązania dot. logowania i korzystania z usług Allegro.



Avatarus
nie, bo to nie chodzi o logowanie do allegro tylko menadżera sprzedaży allegro, a to dwie różne sprawy. WebApi allegro nie obsługuje menadżera sprzedaży niestety
ohm
Co masz w $content na localu i serwerze?
Avatarus
$content jest używany 2 razy
1 raz zawiera stronę po wylogowani, a drugi raz stronę logowania skąd pobiera unikatowy, zmieniający się token. Na local i na serwerze oba warianty działają. Sypie się dopiero przy ostatnim kroku.
Strona wywala błąd 503 według info.

Tak ten krok wygląda jak odpale na local:
  1. Pobieranie transakcji
  2. (
  3. [url] => <a href="https://ms.allegro.pl/transactionlist/" target="_blank">https://ms.allegro.pl/transactionlist/</a>
  4. [content_type] => text/html; charset=utf-8
  5. [http_code] => 200
  6. [header_size] => 482
  7. [request_size] => 285
  8. [filetime] => -1
  9. [ssl_verify_result] => 20
  10. [redirect_count] => 0
  11. [total_time] => 0.454
  12. [namelookup_time] => 0
  13. [connect_time] => 0
  14. [pretransfer_time] => 0
  15. [size_upload] => 0
  16. [size_download] => 163678
  17. [speed_download] => 360524
  18. [speed_upload] => 0
  19. [download_content_length] => 163678
  20. [upload_content_length] => -1
  21. [starttransfer_time] => 0.422
  22. [redirect_time] => 0
  23. [redirect_url] =>
  24. [primary_ip] => 5.134.210.168
  25. [certinfo] => Array
  26. (
  27. )
  28.  
  29. [primary_port] => 443
  30. [local_ip] => 192.168.0.26
  31. [local_port] => 56032
  32. )



a tak na serwerze:

  1. Pobieranie transakcji
  2. (
  3. [url] => <a href="https://ms.allegro.pl/account/checklogin/" target="_blank">https://ms.allegro.pl/account/checklogin/</a>
  4. [content_type] => text/html; charset=utf-8
  5. [http_code] => 503
  6. [header_size] => 553
  7. [request_size] => 474
  8. [filetime] => -1
  9. [ssl_verify_result] => 20
  10. [redirect_count] => 0
  11. [total_time] => 0.116044
  12. [namelookup_time] => 1.7E-5
  13. [connect_time] => 2.0E-5
  14. [pretransfer_time] => 2.1E-5
  15. [size_upload] => 252
  16. [size_download] => 978
  17. [speed_download] => 8427
  18. [speed_upload] => 2171
  19. [download_content_length] => 978
  20. [upload_content_length] => 0
  21. [starttransfer_time] => 0.116013
  22. [redirect_time] => 0
  23. [redirect_url] =>
  24. [primary_ip] => 5.134.210.168
  25. [certinfo] => Array
  26. (
  27. )
  28.  
  29. [primary_port] => 0
  30. [local_ip] =>
  31. [local_port] => 0
  32. )


nie mam pojęcia skąd się to bierze.
Próbowałem te skrypt na innym serwerze (ten jest na dhosting.pl), a spróbowałem na home.pl i tam działa tak samo jak na lokalu. Co wiec jest problemem? Wychodzi że serwer? ale czego mu brakuje? albo co go może blokowac?
jackraymund
Zobacz co sie dzieje na error_reporting(E_ALL);
Zdebuguj requesty, sprawdź też plik z cookiesami, najlepiej go wyczyść.
  1. if($aAnalyseRequestToFile)
  2. {
  3. curl_setopt($curlRequest, CURLOPT_VERBOSE, true);
  4. $verbose = fopen('cURLdebug.txt', 'a');
  5. curl_setopt($curlRequest, CURLOPT_STDERR, $verbose);
  6. }

Avatarus
problem był z kontem na serwerze, oto odpowiedź z dhosting

Cytat
Nasi administratorzy do pliku .htaccess dodali następującą regułę:

php_value arg_separator.output "&"
php_value arg_separator.input "&"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.