Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

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. Od razu chcę zaznaczyć, że nie będzie to narzędzie do wysyłania spamu itp ponieważ na niektórych profesjonalnych forach ludzie nie chcą pomagać w rozwijaniu takiego typu skryptów. Robię to pod moją stronę w celu integracji wszystkich profilów z mojej strony z profilami naszej klasy, w tym celu chce wysyłać osobom, które podadzą swój numer profilu kod aktywujący, abym miał pewność, że podali prawidłowy numer profilu na naszej klasie. Kod aktywujący będzie wysyłany na pocztę na nk.pl, a następnie będą oni koiować ten kod i wklejać na stronie do mojego formularza w celu aktywacji informacji, że dany użytkownik posiada zweryfikowane konto na nk.pl
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.


// INIT CURL
$ch = curl_init();

//echo '=> Loggin...';
//sleep(1);

//********************** LOGIN
//curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_USERAGENT, self::$USER_AGENT);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl');
curl_setopt($ch, CURLOPT_URL, 'https://nk.pl/login');
curl_setopt ($ch, CURLOPT_POST, 1);
$post = array();
$post['login'] = 'nazwa_uzytkownika';
$post['password'] = 'haslo_logowania';
$post['remember'] = '1';
$post['ssl'] = '1';

curl_setopt ($ch, CURLOPT_POSTFIELDS, $this->createPostString($post));
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

$store = curl_exec ($ch);

if(!$store)
{
//echo '========> RETURNED: FALSE -> TERMINATING...';
return;
}
//echo '=> Logged';

$nrProfilu = 11143965; // numer profilu do ktorego nalezy wyslac wiadomosc
curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/profile/'.$nrProfilu);
curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/poczta/compose/'.$nrProfilu);
$messagePage = curl_exec ($ch);

if(!$messagePage) {
//echo '========> RETURNED: FALSE -> TERMINATING...';
return;
}

$matches = array();
// zmienne formularza ktory wysyla wiadomosc do uzytkownika
$auto_form_ticket = '';
$mail_recipient_input = '';
$mail_recipient_search = '';
$__utm_admin = '';
$target = '';

$result = preg_match('/<input type="hidden" name="auto_form_ticket" value="([^"]+)"><input type="hidden" name="__utm_admin" value="([^"]+)">/',$messagePage,$matches);
if ($result) {
$auto_form_ticket = $matches[1];
$__utm_admin = $matches[2];
}
$matches = array();
$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);
if ($result) {
$mail_recipient_input = $matches[1];
$mail_recipient_search = $matches[2];
}

$post = array();
$post['auto_form_ticket'] = $auto_form_ticket;
$post['mail_recipient_input'] = $mail_recipient_input;
$post['mail_recipient_search'] = $mail_recipient_search;
$post['__utm_admin'] = $__utm_admin;
$post['target'] = 'http://nk.pl/profile/'.$nrProfilu;
$post['topic'] = 'Temat';
$post['content'] = 'Test treści wiadomości';

curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/poczta/compose/'.$nrProfilu);
curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/poczta/compose/'.$nrProfilu);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $this->createPostString($post));

// 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
$result = curl_exec($ch);


// wylogowanie z nk
curl_setopt ($ch,CURLOPT_URL, 'http://nk.pl/logout?l=1');
curl_exec($ch);
// zamkniecie sesji
curl_close ($ch);
echo $result;
}

/**
* Funkcja przyjmuje tablice zmiennych i buduje z niej ciag znakow do wyslania metoda post
*/
function createPostString($aPostFields) {
foreach ($aPostFields as $key => $value) {
$aPostFields[$key] = urlencode($key) . '=' . urlencode($value);
}
return implode('&', $aPostFields);
}

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Firefox + wtyczka Tamper Data.

Zobacz co i jak dokładnie jest wysyłane przez Twój skrypt i przez nk i porównaj. Może się też do tego przydać wtyczka Firebug.
Jacek Z.

Jacek Z. Web Application
Developer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Skoro w $result pojawia się już wypełniony formularz, to znaczy, że inputy maja wypełnione atrybuty value wartościami, które chcesz wysłać. A to by z kolei znaczyło, że formularz został submitowany, ale nk go wyświetliło ponownie, tak jakby wystąpił jakiś błąd. Nie ma żadnego komunikatu? Może jest jeszcze jakieś zabezpieczenie, o którym nie wiesz?

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Wygeneruj numer i każ użytkownikowi umieścić go na stronie swojego profilu. Może to być nr telefonu, informacja o sobie lub aktualne zajęcie. Prostsze, a na dodatek nikt nie posądzi Cię o rozsyłanie spamu.
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Piotr Dusik:
Wygeneruj numer i każ użytkownikowi umieścić go na stronie swojego profilu. Może to być nr telefonu, informacja o sobie lub aktualne zajęcie. Prostsze, a na dodatek nikt nie posądzi Cię o rozsyłanie spamu.

Dobry pomysł, mimo że nie rozwiązuje problemu wiadomości, ale cel można osiągnąc i w ten sposób. Naprawdę dzięki za tą idee... Z tym formularzem to kilka dni już walcze debuguje firebugami i innymi i nic.
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Jacek Z.:
Skoro w $result pojawia się już wypełniony formularz, to znaczy, że inputy maja wypełnione atrybuty value wartościami, które chcesz wysłać. A to by z kolei znaczyło, że formularz został submitowany, ale nk go wyświetliło ponownie, tak jakby wystąpił jakiś błąd. Nie ma żadnego komunikatu? Może jest jeszcze jakieś zabezpieczenie, o którym nie wiesz?

Tak w $result pojawia się wypełniony formularz, ale nie ma tego diva z informacja, że wiadomość została wysłana na zielonym tle. Też powoli zaczynałem tak myśleć, że mają jakieś zabezpieczenie tylko jakie?
Andrzej Martynowicz

Andrzej Martynowicz Starszy inżynier
oprogramowania
(Java/JEE), Tieto
Poland

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Po pierwsze sprawdź czy w resulcie nie ma tego komunikatu na czerwonym tle, który się pojawia jak pole jest niewypełnione:

<div><p class="errors">Popraw następujące błędy:</p><ul class="errors"><li><span class="error_bullet">• </span>Temat lub treść wiadomości musi zawierać co najmniej 3 znaki</li></ul></div>


Jak nie ma to z tego co widzę może oznaczać, że źle odczytałeś auto_form_ticket. Sprawdź czy napewno jest dobry, bo jak si wysyła ze złym ticketem to właśnie się wyświetla jeszcze raz ten formularz.

Nie wiem czy to może mieć znaczeni, ale upewnij się, że wysyłasz wszystko w UTF-8 (tzn. fomularz html musisz wysyłać ze strony zakodowanej utf8)... i wogóle testowałbym na userze, który nie ma polskich znaków (ani innych krzaków) w nazwie, bo preg_match może w pewnych przypadkach nie trafić jeżeli wrzucisz tam stringi z utfowymi (multibyteowymi) znakami.

Acha sprawdziłem jeszcze, że http refferer nie ma znaczenia, więc to raczej nie jest problem.

no i ogólnie ciekawy jestem czy wogóle się uda to zrobić :)

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Może jestem za stary na takie zabawy - ale ja bym nie pomagał.

Wyobrażacie sobie (Wy wszyscy "pomagacze"), że gdzieś na innym forum ktoś właśnie testuje Wasze zabezpieczenia w Waszych skryptach?

Gdyby nk chciało to by dało jakieś API czy "cuś" a tak to jest to przynajmniej "moralnie niemoralne".

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Ja bym jeszcze zobaczył takie dwie opcje CURL-a:
CURLOPT_VERBOSE
CURLOPT_STDERR

Zapisz sobie wszystko co się działo do pliku i porównaj to z tym co dostajesz z "Tamper Data". Tak na such to trudno powiedzieć gdzie może być błąd. Nie mam nawet konta na nk żeby to przetestować, ale bez zapisania poszczególnych kroków trudno będzie ustalić co się posypało.
Ja w ten sposób debugowałe importer kontaktów z gmaila, onetu i tym podobnych.

@Robert B. - Ja akurat nie widzę w tym niczego niemoralnego dopóki NK jawnie w regulaminie nie zabrania takich praktyk (a tego nie wiem, bo nie czytałem nigdy ich regulaminu). A co do samego szukania błędów w skryptach - to przecież właśnie o to chodzi. Lepiej, żeby ktoś na forum opisał, że skrypty serwisu X są wadliwe, niż żeby siedział cicho i skrzętnie te błędy wykorzystywał. Jeśli takie informacje pojawiają się publicznym forum to ja jestem jak najbardziej za :) (poza tym to o czym tu mowa to nie błąd tylko normalna funkcjonalność - przeglądarka robi dokładnie to samo).

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Aleksander, to nie tak, że każdy właściciel strony musi sobie zastrzegać w polityce prywatności (czy innym dokumencie) kto czego nie może zrobić z danymi serwisu. W polityce prywatności można co najwyżej napisać, że wyrażamy na to zgodne. Chciałbyś, aby ktoś Ci parsował przez jakieś skrypty stronę, robił syf, spamował i zaśmiecał? Bo tak to najprawdopodobniej się skończy.

Gdyby nk (czy inny serwis) chciało udostępniać taką funkcjonalność użytkownikom to dawno temu udostępniłoby specjalne API - nie zrobili tego.

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Aleksander Wons:
... Ja akurat nie widzę w tym niczego niemoralnego dopóki NK jawnie w regulaminie nie zabrania takich praktyk


Nie będę rozpatrywał cudzej moralności. Napisałem to co napisałem (czytaj: ja bym nie pomagał). Każdy z Was jest na swój sposób dorosły i odpowiedzialny za swoje czyny i wypowiedzi.Robert B. edytował(a) ten post dnia 26.08.10 o godzinie 08:38

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Kamil Brenk:
Aleksander, to nie tak, że każdy właściciel strony musi sobie zastrzegać w polityce prywatności (czy innym dokumencie) kto czego nie może zrobić z danymi serwisu. W polityce prywatności można co najwyżej napisać, że wyrażamy na to zgodne. Chciałbyś, aby ktoś Ci parsował przez jakieś skrypty stronę, robił syf, spamował i zaśmiecał? Bo tak to najprawdopodobniej się skończy.
Czyli nie używasz takich rzeczy jak importery kontaktów np. w linkedin, facebook czy innych takich serwisach? Bo nie ma API? Korzystasz ze stron a agregatorami RSS-ów? Jeżeli chociaż raz coś takiego zrobiłeś, to chyba troszkę kuleje ta "moralność".

No to skoro w regulaminie określamy (lub nie, bo jak napisałeś "można" a nie "trzeba") co wolno, to znaczy, że jeśli w regulaminie nie pisze, że mogę na stronę wejść przez przeglądarkę X to znaczy, że nie mogę? Czy może gdzieś są jakieś odgórne przepisy (jeśli są proszę o wskazanie takowych)?
Regulaminy są właśnie po to, żeby wypunktować zarówno prawa jak i obowiązki obu stron. Jeśli czegoś regulamin nie obejmuje to stosuje się przepisy ogólne (kodeks).

Nie mam nic przeciwko parsowaniu moich stron. Dopóki nie wiąże się to z kradzieżą zamieszczonych tam danych czy spamowaniem nie ma w tym niczego złego.
Parsowanie strony nie jest jednoznaczne z chęcią popełniania czynów niemoralnych (tak jak to sugerujecie).

Gdyby nk (czy inny serwis) chciało udostępniać taką funkcjonalność użytkownikom to dawno temu udostępniłoby specjalne API - nie zrobili tego.
Udostępnienie API nie wynika z chęci/niechęci twórców serwisu a bardziej z zapotrzebowania na taką funkcjonalność. Gdyby zapotrzebowanie było duże, to pewnie i API by się pojawiło. Ale pisanie API dla kilku zapaleńców?

Czyli FB i Linkedin-a należy piętnować, bo przecież większość serwisów pocztowych nie ma API do pobierania listy kontaktów - zgadza się?
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Andrzej Martynowicz:
Po pierwsze sprawdź czy w resulcie nie ma tego komunikatu na czerwonym tle, który się pojawia jak pole jest niewypełnione:

<div><p class="errors">Popraw następujące błędy:</p><ul class="errors"><li><span 	[/quote]> class="error_bullet">• </span>Temat lub treść 	[quote]wiadomości musi zawierać co najmniej 3 znaki</li></ul></div>


Jak nie ma to z tego co widzę może oznaczać, że źle odczytałeś auto_form_ticket. Sprawdź czy napewno jest dobry, bo jak si wysyła ze złym ticketem to właśnie się wyświetla jeszcze raz ten formularz.

Nie wiem czy to może mieć znaczeni, ale upewnij się, że wysyłasz wszystko w UTF-8 (tzn. fomularz html musisz wysyłać ze strony zakodowanej utf8)... i wogóle testowałbym na userze, który nie ma polskich znaków (ani innych krzaków) w nazwie, bo preg_match może w pewnych przypadkach nie trafić jeżeli wrzucisz tam stringi z utfowymi (multibyteowymi) znakami.

Acha sprawdziłem jeszcze, że http refferer nie ma znaczenia, więc to raczej nie jest problem.

no i ogólnie ciekawy jestem czy wogóle się uda to zrobić :)

Bardzo dziękuje za analizę. Na bank Token dobrze odczytuje, ale możliwe, że coś z kodowaniem i znakami się rozwala. Muszę to jakoś sprawdzić.

Dodałem opcję do CURL:

CURLOPT_VERBOSE
CURLOPT_STDERR


Ale w pliku nie mam informacji co jest wysyłane w POST. Są tylko info o ciasteczkach i nagłówkach. Czy ktoś z Was wie jak podejrzeć to co wysyła CURL do serwera HTTP?
Mariusz Koenig

Mariusz Koenig Szef i Wielki
Porażkator
najwiekszeporazki.pl

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Ale w pliku nie mam informacji co jest wysyłane w POST. Są tylko info o ciasteczkach i nagłówkach. Czy ktoś z Was wie jak podejrzeć to co wysyła CURL do serwera HTTP?

Zmien URL ostatniego zadania CURL'a na http://locahost/test.php a w test.php zrob vardump POST i GET;
albo uzyj jakiegos snifferaMariusz Koenig edytował(a) ten post dnia 26.08.10 o godzinie 18:48
Mariusz Koenig

Mariusz Koenig Szef i Wielki
Porażkator
najwiekszeporazki.pl

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Ja bym podejrzewal ze NK mogla zrobic jakies zabezpieczenie z uzyciem javascript np.

Jesli w danej sesji serwer zwrocil wartosc "abcd" i zostala ona zapamietana po stronie uzytkownika, to przy nastepnym żądaniu spodziewa sie on zmodyfikowanej odpowiedzi od uzytkownika przy pomocy jakiegos klucza np "!@#$". Ten klucz (funkcja) będzie gdzies w zrodłach javascript stronki , tzreba tlyko go znalezc.
Mariusz Koenig

Mariusz Koenig Szef i Wielki
Porażkator
najwiekszeporazki.pl

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Udostępnienie API nie wynika z chęci/niechęci twórców serwisu a bardziej z zapotrzebowania na taką funkcjonalność. Gdyby zapotrzebowanie było duże, to pewnie i API by się pojawiło. Ale pisanie API dla kilku zapaleńców?

NK utrzymuje sie glownie z reklam wiec im wiecej odslon strony NK tym wiecej wplywow z reklam. Jesli udostepnili by API ktore pozwala wysylac wiadomosci, pobierac kontakty itd.., jak grzyby po deszczu pojawily by sie rozne aplikacje z tego korzystajace przez co ruch na NK by zmalal (wplywy oczywiscie tez).

Allegro np stosuje oplaty za korzystanie z ich WEBAPI, z tym ze w przypadku allegro WEBAPI jest wykorzystywane przez oprogramowanie sklepow i ich wlasciciele sa sklonni zaplacic abonament.

W przypadku NK mało kto byłby sklonny zaplacic abonament za komunikator w ktorym moze pogadac ze znajomymi z NK.
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Mariusz Koenig:
Ja bym podejrzewal ze NK mogla zrobic jakies zabezpieczenie z uzyciem javascript np.

Jesli w danej sesji serwer zwrocil wartosc "abcd" i zostala ona zapamietana po stronie uzytkownika, to przy nastepnym żądaniu spodziewa sie on zmodyfikowanej odpowiedzi od uzytkownika przy pomocy jakiegos klucza np "!@#$". Ten klucz (funkcja) będzie gdzies w zrodłach javascript stronki , tzreba tlyko go znalezc.

Ale wysyłanie wiadomości także działa jak w firefoxie wyłączy się kompletnie javascript. Co do przekierowania na localhosta zaraz pokombinuje. W sumie to sprytne co tu napisałeś :)
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Sprawdziłem następujące rzeczy.

1. Upewniłem się, że na bank ticket i inne pola są dobrze odczytywane. Były i są dobrze odczytywane co do bajta.
2. Sprawdziłem co wysyła CURL i porównałem to z tym co wysyła Firefox z wyłączonym Javascriptem i oto wyniki:

Oryginał wysyłany w Firefox'a

POST /poczta/compose/34143965 HTTP/1.1
Host: nk.pl
User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.8) Gecko/20100723 Ubuntu/9.04 (jaunty) Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://nk.pl/poczta/compose/34143965
Cookie: nk_session=CfYPbeZCcYGgBDMfsa2ansIfh12; basic_auth=4c7fee7b8a5725a50d80c8a2; lltkck=YzJzdzJwNnRyMTAxZ3g3NTU0cXhAczF6bzl4OHpyajM2aG41NTgyb2hAYjljYjE5ZDJiODM2MmFiNWNhOGEzZTliMmFhMGZlODRkMGVmY2Y3ZQ%3D%3D; remember_me=33495910.4c9e40fb749084499eb39115
Content-Type: application/x-www-form-urlencoded
Content-Length: 250
auto_form_ticket=4c78059753506fd4004480b1&__utm_admin=%CE%9DO&mail_recipient_input=Mi%C5%82o%C5%9Bnicy+Samochod%C3%B3w&mail_recipient_search=34143965&topic=temat&content=test+wysylania+wiadomosci&submit=&target=http%3A%2F%2Fnk.pl%2Fprofile%2F34143965


A tutaj to co jest wysyłane ze skryptu:

POST /poczta/compose/34143965 HTTP/1.1
Host: nk.pl
Accept-encoding: gzip, deflate
User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.8) Gecko/20100723 Ubuntu/9.04 (jaunty) Firefox/3.6.8
Cookie: nk_session=6z9RLKRWP76xaSk4WvEf00iwcze;basic_auth=4c7ff06e3465d87e639f4569;lltkck=YzJzdzJwNnRyMTAxZ3g3NTU0cXhAczF6bzl4OHpyajM2aG41NTgyb2hAYjljYjE5ZDJiODM2MmFiNWNhOGEzZTliMmFhMGZlODRkMGVmY2Y3ZQ%3D%3D;remember_me=33495910.4c9e42eeab5981c0b365efe0;js_enabled=0;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
Connection: Keep-Alive
Keep-Alive: 115
Content-Type: application/x-www-form-urlencoded
Content-Length: 250

auto_form_ticket=4c78076f4ed52f1eda1b26c5&__utm_admin=%CE%9DO&mail_recipient_input=Mi%C5%82o%C5%9Bnicy+Samochod%C3%B3w&mail_recipient_search=34143965&topic=temat&content=test+wysylania+wiadomosci&submit=&target=http%3A%2F%2Fnk.pl%2Fprofile%2F34143965


Aktualnie skrypt ma następującą postać, dodałem trochę nagłówków których nie było. Problem nadal jest ten sam.


<?php

$USER_AGENT = 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.2.8) Gecko/20100723 Ubuntu/9.04 (jaunty) Firefox/3.6.8';

function createPostString($aPostFields) {
foreach ($aPostFields as $key => $value) {
$aPostFields[$key] = urlencode($key) . '=' . urlencode($value);
}
return implode('&', $aPostFields);
}

$headers = array ();
$headers[] = 'Host: nk.pl';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$headers[] = 'Accept-Language: pl,en-us;q=0.7,en;q=0.3';
$headers[] = 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7';
$headers[] = 'Connection: Keep-Alive';
$headers[] = 'Keep-Alive: 115';



$wrapper = fopen('./error.txt', 'w+');
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $USER_AGENT);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $wrapper);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl');
curl_setopt($ch, CURLOPT_URL, 'https://nk.pl/login');
curl_setopt($ch, CURLOPT_POST, 1);
$post = array();
$post['login'] = 'login';
$post['password'] = 'haslo';
$post['remember'] = '1';
$post['ssl'] = '1';

curl_setopt($ch, CURLOPT_POSTFIELDS, createPostString($post));
$store = curl_exec($ch);

if (!$store) {
return;
}
$nrProfilu = 34143965;
curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/profile/'.$nrProfilu);
curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/poczta/compose/'.$nrProfilu);
$messagePage = curl_exec($ch);

if (!$messagePage) {
return;
}

$matches = array();
$auto_form_ticket = '';
$mail_recipient_input = '';
$mail_recipient_search = '';
$__utm_admin = '';
$target = '';

$result = preg_match('/<input type="hidden" name="auto_form_ticket" value="([^"]+)"><input type="hidden" name="__utm_admin" value="([^"]+)">/', $messagePage, $matches);
if ($result) {
$auto_form_ticket = $matches[1];
$__utm_admin = $matches[2];
}
$matches = array();
$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);
if ($result) {
$mail_recipient_input = $matches[1];
$mail_recipient_search = $matches[2];
}

$post = array();
$post['auto_form_ticket'] = $auto_form_ticket;
$post['mail_recipient_input'] = $mail_recipient_input;
$post['mail_recipient_search'] = $mail_recipient_search;
$post['__utm_admin'] = $__utm_admin;
$post['target'] = 'http://nk.pl/profile/'.$nrProfilu;
$post['topic'] = 'Temat';
$post['content'] = 'zloimrok';

curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/poczta/compose/'.$nrProfilu);
curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/poczta/compose/'.$nrProfilu);
curl_setopt($ch, CURLOPT_POSTFIELDS, createPostString($post));

// result zawiera wypelniony niewyslany formularz bez napisu ze wyslano wiadomosc
$result = curl_exec($ch);
echo '-----------------'.PHP_EOL;
echo $result.PHP_EOL;
echo '-----------------'.PHP_EOL;
curl_setopt($ch, CURLOPT_REFERER, 'http://nk.pl/profile/'.$nrProfilu);
curl_setopt($ch, CURLOPT_URL, 'http://nk.pl/logout?l=1');
curl_exec($ch);
curl_close($ch);
fclose($wrapper);


?>


Ktoś ma jeszcze jakieś pomysły co może blokować wysłanie tej prostej wiadomości.

konto usunięte

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

W cookie masz coś takiego "js_enabled=0". Dodaj coś takiego do swojego skryptu.
Dodatkowo ustaw pole "referer". To może brzmi naiwnie, ale np. do poczty interii nie zalogujesz się bez podania user agent a do gmaila, o2 i wp już bez problemu.
NK utrzymuje sie glownie z reklam wiec im wiecej odslon strony NK tym wiecej
wplywow z reklam.

Czyli dokładnie tak jak napisałem. API powstaje wtedy, kiedy serwis ma w tym jakiś interes a nie wtedy kiedy twórcy mają taki kaprys :)
Marcin Kapusta

Marcin Kapusta iOS
Developer/Software
Developer/Music
Producer

Temat: CURL - Problem ze skryptem do wysyłania wiadomości

Aleksander Wons:
W cookie masz coś takiego "js_enabled=0". Dodaj coś takiego do swojego skryptu.
Dodatkowo ustaw pole "referer". To może brzmi naiwnie, ale np. do poczty interii nie zalogujesz się bez podania user agent a do gmaila, o2 i wp już bez problemu.

Przecież to co wysyła firefox to tam nie ma ustawionego tego ciasteczka. To mój skrypt wysyła to js_enabled=0. Może to wywale jakoś, żeby nie wysyłał tego? Bo w sumie w kodzie nigdzie nie ustawiam, żeby to ciasteczko było wysyłane



Wyślij zaproszenie do