Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: CURL - Problem ze skryptem
Forum PHP.pl > Forum > PHP
Kapucha
Witajcie

Próbuje napisać skrypt do wysyłania wiadomości na nk.pl. Nie chodzi mi jednak o śledzika tylko o wiadomości na pocztę innego użytkownika.
Jeśli ktoś umiałby przeanalizować poniższy skrypt do wysyłania wiadomości na nk to byłbym bardzo wdzięczny. Skrypt loguje się poprawnie (linie od 16 do 32) otwiera formularz do wysyłania wiadomości do użytkownika o danym numerze profilu (linie od 34 do 42), sczytuje wszelkie zmienne zabezpieczające z pól hidden (linie od 44 do 62), wypełnia pola topic i content odpowiedzialne za temat wiadomości i treść i wszystko co ma być wysłane postem zapisuje do zmiennej $post linie od 64 do 71), ale zachowuje się tak jakby nie mógł wysłać metodą post wiadomości (linie od 73 do 78). Następnie skrypt się wylogowuje i to działa poprawnie (linie od 81 do 83). Z góry dziękuje za odpowiedzi.

  1. // INIT CURL
  2. $ch = curl_init();
  3.  
  4. //echo '=> Loggin...';
  5. //sleep(1);
  6.  
  7. //********************** LOGIN
  8. //curl_setopt($ch, CURLOPT_VERBOSE, 1);
  9. curl_setopt($ch, CURLOPT_USERAGENT, self::$USER_AGENT);
  10. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  11. curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
  12. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  13. curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl');
  14. curl_setopt($ch, CURLOPT_URL, 'https://nk.pl/login');
  15. curl_setopt ($ch, CURLOPT_POST, 1);
  16. $post = array();
  17. $post['login'] = 'nazwa_uzytkownika';
  18. $post['password'] = 'haslo_logowania';
  19. $post['remember'] = '1';
  20. $post['ssl'] = '1';
  21.  
  22. curl_setopt ($ch, CURLOPT_POSTFIELDS, $this->createPostString($post));
  23. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  24.  
  25. $store = curl_exec ($ch);
  26.  
  27. if(!$store)
  28. {
  29. //echo '========> RETURNED: FALSE -> TERMINATING...';
  30. return;
  31. }
  32. //echo '=> Logged';
  33.  
  34. $nrProfilu = 11143965; // numer profilu do ktorego nalezy wyslac wiadomosc
  35. curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/profile/'.$nrProfilu);
  36. curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/poczta/compose/'.$nrProfilu);
  37. $messagePage = curl_exec ($ch);
  38.  
  39. if(!$messagePage) {
  40. //echo '========> RETURNED: FALSE -> TERMINATING...';
  41. return;
  42. }
  43.  
  44. $matches = array();
  45. // zmienne formularza ktory wysyla wiadomosc do uzytkownika
  46. $auto_form_ticket = '';
  47. $mail_recipient_input = '';
  48. $mail_recipient_search = '';
  49. $__utm_admin = '';
  50. $target = '';
  51.  
  52. $result = preg_match('/<input type="hidden" name="auto_form_ticket" value="([^"]+)"><input type="hidden" name="__utm_admin" value="([^"]+)">/',$messagePage,$matches);
  53. if ($result) {
  54. $auto_form_ticket = $matches[1];
  55. $__utm_admin = $matches[2];
  56. }
  57. $matches = array();
  58. $result = preg_match('/<input class="clean" readonly="readonly" tabindex="5" id="compose_mail_recipient_input" name="mail_recipient_input" type="text" value="([^"]+)"><input id="mail_recipient" type="hidden" name="mail_recipient_search" value="([^"]+)">/',$messagePage,$matches);
  59. if ($result) {
  60. $mail_recipient_input = $matches[1];
  61. $mail_recipient_search = $matches[2];
  62. }
  63.  
  64. $post = array();
  65. $post['auto_form_ticket'] = $auto_form_ticket;
  66. $post['mail_recipient_input'] = $mail_recipient_input;
  67. $post['mail_recipient_search'] = $mail_recipient_search;
  68. $post['__utm_admin'] = $__utm_admin;
  69. $post['target'] = 'http://nk.pl/profile/'.$nrProfilu;
  70. $post['topic'] = 'Temat';
  71. $post['content'] = 'Test treści wiadomości';
  72.  
  73. curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/poczta/compose/'.$nrProfilu);
  74. curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/poczta/compose/'.$nrProfilu);
  75. curl_setopt ($ch, CURLOPT_POSTFIELDS, $this->createPostString($post));
  76.  
  77. // wysłanie wiadomości. Tu coś jest nie tak bo w $result pojawia się strona z wypełnionym formularzem tak jakby nie był wysłany
  78. $result = curl_exec($ch);
  79.  
  80.  
  81. // wylogowanie z nk
  82. curl_setopt ($ch,CURLOPT_URL, 'http://nk.pl/logout?l=1');
  83. curl_exec($ch);
  84. // zamkniecie sesji
  85. curl_close ($ch);
  86. echo $result;
  87. }
  88.  
  89. /**
  90.   * Funkcja przyjmuje tablice zmiennych i buduje z niej ciag znakow do wyslania metoda post
  91.   */
  92. function createPostString($aPostFields) {
  93. foreach ($aPostFields as $key => $value) {
  94. $aPostFields[$key] = urlencode($key) . '=' . urlencode($value);
  95. }
  96. return implode('&', $aPostFields);
  97. }


--
Pozdrawiam
Marcin
Zapraszam na moją stronę promującą tanie wspólne podróżowanie i tani przewóz osób

Nikt nie wie dlaczego ten formularz na naszej klasie nie chce przejść?
amii
1. Sprawdzałeś wysyłane zmienne programem HTTP Live Headers ?
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.