Dane z GUS - NIP

0

Witam wszystkich!

Na początku zaznaczę, że nie jestem pewien czy na odpowiednim forum wstawiam mój post. Jeśli nie proszę o korektę.

A teraz do rzeczy..

Klient zażyczył sobie w swoim systemie, aby miał możliwość wyszukania firmy po numerze NIP. Myślę sobie, ok. Idąc tym tropem trafiłem do... GUS. Duża firma posiadająca ogromne ilości danych. Ale ku mojemu zaskoczeniu - negatywnemu - okazało się, że nie! posiadają oni API (darmowe/płatne). Byłem w szoku...
Urywek korespondencji z nimi:

[...] która będzie komunikować się z wyszukiwarką REGON i symulować działania użytkownika na stronie wyszukiwarki, przy czym kod weryfikacyjny musi być pobrany przez wspomnianą aplikację i następnie wprowadzony przez użytkownika, tzn. niedopuszczalne jest rozpoznawanie kodu w sposób automatyczny [...]

Czy możecie mi coś podpowiedzieć/doradzić co zrobić, ew. jak? Bo zupełnie nie wiem jak ten temat ugryźć.. ;/

AN
  • Rejestracja:około 14 lat
  • Ostatnio:4 miesiące
  • Postów:125
0
0
Anoxic napisał(a):

Nie wiem czy o to pomoże, tu masz dwie wyszukiwarki:
https://prod.ceidg.gov.pl/CEIDG/CEIDG.Public.UI/Search.aspx
https://ems.ms.gov.pl/krs/wyszukiwaniepodmiotu

Nie zupełnie mi o to chodziło.., bo wyszukiwarka jest dostępna pod adresem http://www.stat.gov.pl/regon/
Mi bardziej chodzi o implementacje/integracje takowej wyszukiwarki pod własny system. Jakby było API to nie ma problemu, a tak..?!

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

Czy możecie mi coś podpowiedzieć/doradzić co zrobić, ew. jak? Bo zupełnie nie wiem jak ten temat ugryźć.. ;/

Dokładnie tak jak odpisał ci GUS. Gdy użytkownik twojego programu będzie chciał wyszukać firmę po numerze NIP, pobierzesz ze strony odpowiedni token (i/lub inne identyfikatory) oraz obrazek captchy, każesz użytkownikowi przepisać ją i wyślesz wszystko z powrotem.
Na początek polecam prześledzić całą transmisję (a przede wszystkim request, który wysyła przeglądarka). Będziesz musiał ją odtworzyć w swoim programie.

OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0

Rev a możesz podrzucić czym w tym wypadku musiałbym się zainteresować, bo szczerze przyznam, że nigdy się czymś takim nie interesowałem ani nie robiłem..

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

Wystarczy do tego funkcja, dzięki której będziesz mógł pobrać zawartość podanej strony internetowej. W PHP może być to zestaw z cURL.

OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0

Dzięki Rev za podpowiedź.. Jednak dalej mam problem. Udało mi się już pobrać kod captcha z ich strony. Ale dalej mam problem z odpowiedzią od nich.. HELP!

POST który musi do nich dotrzeć wygląda następująco:

Kopiuj
 
xxxx00&xxxx11=numer_nip&queryTypeRBSet=1nip&verifCodeTF=xxxx
//gdzie xxxx - to kod captcha

wrzucam sobie to do cUrl'a:

Kopiuj
 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'ngpdi00=&ngpdi11=7872041662&queryTypeRBSet=1nip&verifCodeTF=ngpdi');

wykorzystuje nagłówki żądania i... pojawia mi się główna strona z wyszukiwarką a nie strona z odpowiedzią... Czy macie jakieś pomysły aby to obejść lub wskazać mi co robię źle?

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

a w drugim zapytaniu przekazujesz ciasteczka odebrane w pierwszym?
"curl cookiejar" w google jak cos


OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0
dzek69 napisał(a):

a w drugim zapytaniu przekazujesz ciasteczka odebrane w pierwszym?
"curl cookiejar" w google jak cos

W drugim zapytaniu?

Ja to robię tak:

Kopiuj
$head = array(
	'POST /regon/ HTTP/1.1',
	'Host: www.stat.gov.pl',
	'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0 FirePHP/0.7.1',
	'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',
	'Referer: http://www.stat.gov.pl/regon/',
	'x-insight: activate',
        'Connection: keep-alive'
); 
$curl = curl_init("http://www.stat.gov.pl/regon/");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $head);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . 'cookies.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . 'cookies.txt');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'queryTypeRBSet=1nip&crmr300=&crmr311=7872110362&verifCodeTF=crmr3');
$stat= curl_exec($curl);
curl_close($curl);

i stoję w miejscu, bo zamiast otrzymanej strony z wynikiem pojawia się dalej strona z wyszukiwarką... Może ma ktoś jakiś pomysł?

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

Zobacz czy plik z ciastkami się w ogóle tworzy, zwróć uwagę czy dirname zwraca Ci końcowy slash, bo chyba nie i może przez problem z zapisem tego pliku nie przyjmuje Ci ciastek.

Dwa - to ty hardkodujesz captchę w kodzie PHP? Tak to wygląda.. Niby jak to ma działać jak captcha jest przecież różna za każdym razem?

Z tymi nagłówkami to trochę przesadziłeś chyba.. nawet nie wiem co "wygra" w takiej bitwie nagłówków w cURL - te z CURLOPT_HTTPHEADER czy te wygenerowane przez cURL tak czy tak (np. POST /regon/ HTTP/1.x)


OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0
dzek69 napisał(a):

Zobacz czy plik z ciastkami się w ogóle tworzy, zwróć uwagę czy dirname zwraca Ci końcowy slash, bo chyba nie i może przez problem z zapisem tego pliku nie przyjmuje Ci ciastek.

tak, tworzy mi plik z ciastkami

dzek69 napisał(a):

Dwa - to ty hardkodujesz captchę w kodzie PHP? Tak to wygląda.. Niby jak to ma działać jak captcha jest przecież różna za każdym razem?

Captchę pobieram w innym miejscu i wiem że jest inna. SIC! :P

dzek69 napisał(a):

Z tymi nagłówkami to trochę przesadziłeś chyba.. nawet nie wiem co "wygra" w takiej bitwie nagłówków w cURL - te z CURLOPT_HTTPHEADER czy te wygenerowane przez cURL tak czy tak (np. POST /regon/ HTTP/1.x)

jak nie wrzucę tych nagłówków co zapisałem, to pojawi mi się "błąd" z ich strony.

Sprawa wygląda tak:

  1. Mam gotowy formularz z pobranym kodem Captcha.
  2. Wpisuje NIP i kod i klikam sprawdź.
  3. I teraz wykonuje się między innymi to co zapisałem w poprzednim poście, a więc pobranie odpowiedzi ze strony stat.gov.pl/regon/.
    Ale jest problem, bo.. nie ma żadnej odpowiedzi tylko zwraca się strona z formularzem stat.gov.pl a powinna to być strona z danymi firmy(jeśli istnieje). Właśnie w tym miejscu utknąłem. I nie wiem czy czegoś nie dopatrzyłem czy może coś jednak robię źle.
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

Dziwi mnie dlaczego właśnie w Twoim kodzie nie ma tam jakichś zmiennych tylko tak na sztywno edytowałeś kod, żeby nam tu pokazać, przez co nie ułatwiasz, tylko utrudniasz zrozumienie tego wszystkiego ;)
Może wrzuć ogólnie cały kod, nie tylko ostatni krok, będzie możliwość odpalenia tego u siebie i prześledzenia


OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0

dzek69 kod nie jest za wielce skomplikowany. Ale masz:

Kopiuj
$kod = $_REQUEST['verifCodeTF'];
$nip = $_REQUEST[$kod.'11'];

$head = array(
	'POST /regon/ HTTP/1.1',
	'Host: www.stat.gov.pl',
	'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0 FirePHP/0.7.1',
	'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',
	'Referer: http://www.stat.gov.pl/regon/',
	'x-insight: activate',
	'Connection: keep-alive'
);

$curl = curl_init("http://www.stat.gov.pl/regon/");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $head);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . 'cookies.txt');
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . 'cookies.txt');

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'queryTypeRBSet=1nip&'.$kod.'00=&'.$kod.'11='.$nip.'&verifCodeTF='.$kod);

$nip_req= curl_exec($curl);
curl_close($curl);

echo $nip_req;

wykonując tą operację powinienem otrzymać w $nip_req odpowiedź od stat.gov.pl z danymi firmy. Czy jednak się mylę?

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

A gdzie masz pierwsze połączenie do serwera? Mówiąc "cały kod" właśnie cały kod mam na myśli


OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0

Nie bardzo Cię rozumiem.
Po kliknięciu "Sprawdź" na formularzu "nipowym" ajaksowo wykonuje ten kod co podałem powyżej.

n0name_l
caly kod tzn. od zerowej linijki do ostatniej ;> Jak za duzy to pastebin.
OL
ale właśnie to jest ten mój cały kod obsługi tego formularza.. od 1 do ostatniej linijki :)
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

Pasowałoby też fragment kodu, w którym SERWER WWW pobiera captchę i przekazuje ją dalej do użytkownika. Jeżeli uważasz, że to jest cała obsługa pobierania to obawiam się, że zaciągasz captchę po prostu podając jakiś link do obrazka w HTML i ta captcha jest poprawna dla sesji użytkownika - a ty potem próbujesz wykorzystać ją jako serwer.


OL
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:7
0

W sumie masz trochę racji bo kod captcha pobieram podając adres http://www.stat.gov.pl/regon/Captcha.jpg?xxx gdzie xxx to numer captchy.

Z tego co zaobserwowałem, to stat.gov.pl zwraca nam 3 stany:

  1. Stronę z wyszukaną firmą
  2. Stronę z informacją, że brak firmy
  3. Błąd o złym kodzie captcha.

Wykonując ajaxowo kod, który odpowiada za obsługę formularza (a więc ten co wpisałem wcześniej) powinienem otrzymać w odpowiedzi od gus którąś z tych 3 informacji. Tak się nie dzieje - zwraca mi stronę z formularzem. Więc wniosek nasuwa mi się sam.. że albo coś źle robię albo nie przekazuję do nich odpowiednich danych...

PR
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:5
0

Udało się pograć komuś dane podmiotu na podstawia NIP z bazy GUS REGON?
Jak można, to zrobić?
Ktoś wie jak się, to zrobić i w jakiej technologii?
GUS nie udziela takich informacji? To jakieś tajne?:)
Z kim można się kontaktować?
Istnieją aplikacje/wyszukiwarki(inne niż GUS), które to potrafią?
Więc jest, to jak najbardziej do zrobienia.
Musi istnieć jakieś dostępne przez GUS API.

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

Udało,
Jak zrobić - wszystko jest napisane w tym poście
Jw., technologia dowolna, w jakiej Ci wygodniej
GUS udziela informacji nt. numerów NIP, nie muszą swoich usług wystawiać dla innych
Jeżeli chcesz męczyć ludzi - najlepiej z nikim, to nie jest trudne, wystarczy poczytać
Istnieją, było przeczytać ten topik (to już kolejne pytanie, na które odpowiedź jest w tym temacie!)
Tak
Nie ma API i nie musi, sam urząd pisał, żeby analizować żądania na ich stronie i powtarzać te same operacje u siebie

Czyli podsumowanie: API nie ma i raczej nie będzie, GUS sugeruje zastosować rozwiązania proponowane w tym poście (ale nie kopiuj kodu, bo nie działa, tylko przeczytaj opisowe odpowiedzi), będziesz potrzebował trochę wiedzy (o żądaniach HTTP), żeby to napisać [wszystko jest w np. wiki].

OFF-TOPIC:

Śmiesznie, stawiasz przecinki.


PR
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:5
0

Przeczytałem, ale niestety mi nie działa.
czyli podsumowując jak należy, to zrobić:

  1. Wyświetlić użytkownikowi captcha z adresu
    http://www.stat.gov.pl/regon/Captcha.jpg?xxx gdzie xxx to numer captchy: wartość xxx - mam sobie wylosować?

  2. Użytkownik wpisze kod captchy oraz nip, w POST należy przekazać te parametry
    np.
    queryTypeRBSet=1nip&i7pwk00=&i7pwk11=5261040828&verifCodeTF=i7pwk

  3. Robię tak ale zwraca mi stronę i nie ma tam informacji o firmie przypisanej do NIP.
    Co robię nie tak? Jak należy, to dokładanie zrobić?
    Proszę o fragment kodu, który by mi pomógł.
    Proszę o pomoc, dzięki.

To dostałem w odpowiedzi:

Kopiuj
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"><head><title>G????wny UrzÄ?d Statystyczny  - Rejestr REGON - wyszukiwarka podmiot??w gospodarki narodowej</title><meta http-equiv="content-type" content="text/html; charset=utf-8" /><meta name="Keywords" content="regon,wyszukiwarka,podmioty gospodarcze" /><meta name="Description" content="G????wny UrzÄ?d Statystyczny - Portal Statystyki Publicznej" />  <link rel="stylesheet" type="text/css" href="http://www.stat.gov.pl/PI_gus/css_js/gusg2_PLK_HTML.css" /><link rel="stylesheet" type="text/css" href="web/scrn1003a.css" media="screen" /><link rel="stylesheet" type="text/css" href="web/prnt0928.css" media="print" /><script type="text/javascript" src="web/main0925_x.js" ></script><script type="text/javascript" src="web/msgpl0921.js"> </script></head><body onload="init();"> <div id="topNavi"><div id="topNaviMenu"></div><div id="topNaviSearch"></div></div> <div id="blok_baner"><img src="web/img/baner_main770.jpg" border="0" alt="G????wny UrzÄ?d Statystyczny" title="G????wny UrzÄ?d Statystyczny" /></div>  <div id="blok_main"> <div id="belkaNavi"><div id="belkaNaviC1"><ul id="belkaMenu1"><li><a class="topN" href="http://www.stat.gov.pl"><span></span>Strona g????wna GUS</a></li><li><a class="topN" href="http://www.stat.gov.pl/bip/regon_PLK_HTML.htm"><span></span>Informacje o rejestrze REGON</a></li></ul></div></div><div id="belkaNaviC2"></div><div id="printButtonsHeader" ><p style="margin-left:auto; margin-right:auto;"><input type="button" id="doPrint0B" name="doPrint0B" value="Drukuj" /><input type="button" id="cancelPrint0B" name="cancelPrint0B" value="Anuluj" /></p><hr /></div><div id="printHeader" ><div id="printHeaderLogo"><img width="60" height="50" alt="" src="web/img/guslogo.gif" /></div><div style="display:inline;"><div id="printHeaderTextLine1">G????WNY URZÄ?D STATYSTYCZNY</div><div id="printHeaderTextLine2">Dane z wpisu w rejestrze REGON <span id="printHeaderTextLine3"> stan danych na dzie??: </span>2013-02-21</div></div></div> <div id="container"> <div id="topOfContainer"></div><div id="screenTextHeader" ><h1 id="titleHeader" >Rejestr REGON - wyszukiwarka podmiot??w gospodarki narodowej</h1><p style="text-indent:200px;">stan danych na dzie??:<span style="font-weight:bold">2013-02-21</span></p><noscript><p id="noscriptT" class="message">Twoja przeglÄ?darka ma wy??Ä?czonÄ? obs??ugÄ? JavaScript.<br /><br />Do dzia??ania wyszukiwarki potrzebna jest w??Ä?czona obs??uga JavaScript.<br /></p></noscript><p id="nocookieT" class="message" >Twoja przeglÄ?darka ma wy??Ä?czonÄ? obs??ugÄ? mechanizmu cookies.<br /><br />Do dzia??ania wyszukiwarki potrzebna jest w??Ä?czona obs??uga cookies.<br /></p></div><div id="formDiv" ><form id="regonlineForm" name="regonlineForm" method="post" action="http://www.stat.gov.pl/regon/" ><p id="mainMenuT" ><input type="radio" id="by_0regon_RB" name="queryTypeRBSet" value="0regon" /><label id="by_0regonL" for="by_0regon_RB" class="mainMenuLabel">Wyszukiwanie wg numeru REGON</label><input type="radio" id="by_1nip_RB" name="queryTypeRBSet" value="1nip" /><label id="by_1nipL" for="by_1nip_RB" class="mainMenuLabel">Wyszukiwanie wg numeru NIP</label></p><div id="buttonT" ><div>ProszÄ? wprowadziÄ?:</div><span id="criterion0T"><label id="criterion0L" for="criterion0TF">numer REGON podmiotu</label><input type="text" id="criterion0TF" name="criterion0TF" value="" size="10" maxlength="9"  style="position:absolute;left:180px;"/></span><span id="criterion1T"><label id="criterion1L" for="criterion1TF" style="position:relative; right:139px;">numer NIP podmiotu</label><input type="text" id="criterion1TF" name="criterion1TF" value="" size="10" maxlength="10"  style="position:absolute;left:180px;"/></span><div><label id="verifCodeL" for="verifCodeTF">kod weryfikacyjny z obrazka poni??ej</label></div><div>&nbsp;<input type="text" id="verifCodeTF" name="verifCodeTF" value="" size="10" maxlength="5" /></div><script type="text/javascript">var bar0 = barInstance(0);</script><span id="captchaImg" ><img name="captchaImg" width="200" height="50" alt="" src="web/img/dummy.jpg" /></span><div id="otherVerifCodeBSpan" ><div>Je??li kod jest nieczytelny -</div><input type="button" id="otherVerifCodeB" name="otherVerifCodeB" class="submitLinkB" value="Generuj inny kod" /></div><span id="sendQueryBSpan" ><input type="button" id="sendQueryB" name="sendQueryB" value="Szukaj" class="sendButton" /></span></div></form><div id="plsWaitT" ><div>PROSIMY O OCZEKIWANIE NA ODPOWIED??</div><div>TRWA ??Ä?CZENIE Z BAZÄ? DANYCH</div><br /><script type="text/javascript">var bar1 = barInstance(1);</script></div><span style="display:none;"><input type="text" id="pageIx" name="pageIx" value="0" /> <input type="text" id="wasSubmitted" name="wasSubmitted" value="no" /></span></div><div id="dbResponseDiv" ></div><div id="bottomOfContainer"></div></div> <div id="printButtonsFooter"><hr /><p><input type="button" id="doPrint1B" name="doPrint1B" value="Drukuj" /><input type="button" id="cancelPrint1B" name="cancelPrint1B" value="Anuluj" /></p></div> <div id="stopka">G????wny UrzÄ?d Statystyczny<br />00-925 Warszawa, Al. Niepodleg??o??ci 208, tel.: centrala: (48 22) 608 30 00<br />Informatorium:  (48 22) 608 31 63, (48 22) 608 31 64<br />Automatyczna informacja statystyczna: (48 22) 608 31 35, (48 22) 608 31 36<br /><b>Copyright &copy; 1995- 2013&nbsp;GUS</b></div> </div> <br /><br /></body></html>
PR
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:5
0

Otrzymałem odpowiedź o nie poprawnych danych, przesyłam zgodnie z tym jak jest opisane na forum.
Co jest nie tak?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"><head><title>G????wny UrzÄ?d Statystyczny - Rejestr REGON - wyszukiwarka podmiot??w gospodarki narodowej</title><meta http-equiv="content-type" content="text/html; charset=utf-8" /><meta name="Keywords" content="regon,wyszukiwarka,podmioty gospodarcze" /><meta name="Description" content="G????wny UrzÄ?d Statystyczny - Portal Statystyki Publicznej" /> <link rel="stylesheet" type="text/css" href="http://www.stat.gov.pl/PI_gus/css_js/gusg2_PLK_HTML.css" /><link rel="stylesheet" type="text/css" href="web/scrn1003a.css" media="screen" /><link rel="stylesheet" type="text/css" href="web/prnt0928.css" media="print" /></head><body> <div id="topNavi"><div id="topNaviMenu"></div><div id="topNaviSearch"></div></div> <div id="blok_baner"><img src="web/img/baner_main770.jpg" border="0" alt="G????wny UrzÄ?d Statystyczny" title="G????wny UrzÄ?d Statystyczny" /></div> <div id="blok_main"> <div id="belkaNavi"><div id="belkaNaviC1"><ul id="belkaMenu1"><li><a class="topN" href="http://www.stat.gov.pl"><span></span>Strona g????wna GUS</a></li><li><a class="topN" href="http://www.stat.gov.pl/bip/regon_PLK_HTML.htm"><span></span>Informacje o rejestrze REGON</a></li></ul></div></div><div id="belkaNaviC2"></div> <div id="container"> <div id="topOfContainer"></div><div id="screenTextHeader" ><h1 id="titleHeader" >Rejestr REGON - wyszukiwarka podmiot??w gospodarki narodowej</h1></div><div id="dbResponseDiv" style="display:block !important;" ><p class="messageP">Twoja przeglÄ?darka przes??a??a niepoprawne dane<br />lub wystÄ?pi?? inny niezidentyfikowany b??Ä?d.<br />ProszÄ? wykonaÄ? operacjÄ? "Od??wie??" w przeglÄ?darce.<br />Je??li problem wystÄ?puje nadal -<br />proszÄ? spr??buowaÄ? ponownie za kilka minut.</p> <p id="bottomHrefsP"><a href="http://www.stat.gov.pl/bip/regon_PLK_HTML.htm" class="bottom-link">Informacje o rejestrze REGON</a><a href="http://www.stat.gov.pl/" class="bottom-link">Strona g????wna GUS</a></p></div><div id="bottomOfContainer"></div></div></div> <div id="stopka">G????wny UrzÄ?d Statystyczny<br />00-925 Warszawa, Al. Niepodleg??o??ci 208, tel.: centrala: (48 22) 608 30 00<br />Informatorium: (48 22) 608 31 63, 31 64, 31 66, 31 61<br />Automatyczna informacja statystyczna: (48 22) 608 31 35, (48 22) 608 31 36<br />Copyright &copy; 1995- 2013Wszelkie prawa zastrze??one. </div> </div><br /><br /></body></html>

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

Wskazówka: prócz problemów, o których mówisz zwróć uwagę na to, że ciastka są modyfikowane przez javascript. To chyba takie sprytne zabezpieczenie miało być.

A rozwiązaniu całego problemu proxy nie pomaga stanowość aplikacji webowych. Trzeba zrobić w sumie trzy requesty, które odpowiadają trzem działaniom użytkownika po twojej stronie: 1. krok to uzyskanie ciastek początkowych (które będą identyfikatorem sesji), 2. krok to pobranie captcha i zaprezentowanie go użytkownikowi oraz 3. krok to przesłanie wyników.

To, czego wciąż nie robisz to pobranie captchy po stronie proxy - bez tego system GUS nie będzie mógł powiązać zaprezentowanej captchy z tekstem użytkownika.

edytowany 1x, ostatnio: Rev
PR
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:5
0

Zrobiłem tak jak pisałeś, wygląda, że jest postęp, ale zwraca mi błąd z ich strony: Twoja przeglądarka jest nie obsługiwana
Dodaję nagłówki: HTTPHEADER
Co jest nie tak?
Co może być przyczyną?

Kopiuj
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl"><head><title>G????wny UrzÄ?d Statystyczny  - Rejestr REGON - wyszukiwarka podmiot??w gospodarki narodowej</title><meta http-equiv="content-type" content="text/html; charset=utf-8" /><meta name="Keywords" content="regon,wyszukiwarka,podmioty gospodarcze" /><meta name="Description" content="G????wny UrzÄ?d Statystyczny - Portal Statystyki Publicznej" />  <link rel="stylesheet" type="text/css" href="http://www.stat.gov.pl/PI_gus/css_js/gusg2_PLK_HTML.css" /><link rel="stylesheet" type="text/css" href="web/scrn1003a.css" media="screen" /><link rel="stylesheet" type="text/css" href="web/prnt0928.css" media="print" /></head><body> <div id="topNavi"><div id="topNaviMenu"></div><div id="topNaviSearch"></div></div> <div id="blok_baner"><img src="web/img/baner_main770.jpg" border="0" alt="G????wny UrzÄ?d Statystyczny" title="G????wny UrzÄ?d Statystyczny" /></div>  <div id="blok_main"> <div id="belkaNavi"><div id="belkaNaviC1"><ul id="belkaMenu1"><li><a class="topN" href="http://www.stat.gov.pl"><span></span>Strona g????wna GUS</a></li><li><a class="topN" href="http://www.stat.gov.pl/bip/regon_PLK_HTML.htm"><span></span>Informacje o rejestrze REGON</a></li></ul></div></div><div id="belkaNaviC2"></div> <div id="container"> <div id="topOfContainer"></div><div id="screenTextHeader" ><h1 id="titleHeader" >Rejestr REGON - wyszukiwarka podmiot??w gospodarki narodowej</h1></div><div id="dbResponseDiv" style="display:block !important;" ><p class="messageP">Twoja przeglÄ?darka nie jest obs??ugiwana.</p> <p id="bottomHrefsP"><a href="http://www.stat.gov.pl/bip/regon_PLK_HTML.htm" class="bottom-link">Informacje o rejestrze REGON</a><a href="http://www.stat.gov.pl/" class="bottom-link">Strona g????wna GUS</a></p></div><div id="bottomOfContainer"></div></div></div>  <div id="stopka">G????wny UrzÄ?d Statystyczny<br />00-925 Warszawa, Al. Niepodleg??o??ci 208, tel.: centrala: (48 22) 608 30 00<br />Informatorium:  (48 22) 608 31 63, 31 64, 31 66, 31 61<br />Automatyczna informacja statystyczna: (48 22) 608 31 35, (48 22) 608 31 36<br />Copyright &copy; 1995- 2013Wszelkie prawa zastrze??one. </div>  </div><br /><br /></body></html>
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

Porównaj absolutnie wszystkie nagłówki, które wysyła przeglądarka. Napiszę jeszcze raz - zwróć uwagę na to, że ciastka są modyfikowane przez javascript! COOKIEJAR i COOKIEFILE tutaj nie wystarczą.

Masz tutaj ich skrypty: https://privatepaste.com/409875077d

edytowany 1x, ostatnio: Rev
PR
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:5
0

Nie rozumie, co to znaczy: "ciastka są modyfikowane przez javascript"
Oprócz pobrania ciasteczek przy pierwszym request coś należy jeszcze zrobić?
Oprócz przekazywania ich do dwóch kolejnych request?

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

Znaczy to, co znaczą poszczególne słowa. Dane ciastek mogą być zmieniane przez javascript i w efekcie przeglądarka przesyła inne ciastka. Ty pobierasz ciastka od serwera i podajesz je z powrotem takie same. Musisz sam napisać jakiś parser, albo pseudoparser ciastek, bo cURL jest tragiczny, jeżeli chodzi o ciastka (umie tylko przekazać tam i z powrotem i tylko korzystając z plików do ich przechowywania), a wcześniej - DOKŁADNIE przeanalizować wszystkie żądania.


RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

Ostrzegam, że kod nawet w połowie nie jest skończony: brakuje zupełnie obsługi błędów, logowania, a nawet parsowania otrzymanych danych. Wymaga pecl http. Do rozpoczęcia nowego requestu wymagany parametr ?reset.

Klasa:

Kopiuj
<?php

class NipRequest
{
    const UNINITIALIZED_PHASE = 0;
    const INITIALIZED_PHASE = 1;
    const CAPTCHA_PHASE = 2;
    const REQUEST_PHASE = 3;
    const COMPLETED_PHASE = 4;

    private $phase;

    private $options;
    private $cookies;

    private $info;

    public function __construct()
    {
        $this->phase = self::UNINITIALIZED_PHASE;
        
        $this->options = array(
            'referer' => 'http://www.stat.gov.pl/regon/',
            'useragent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130224 Firefox/21.0',
            'headers' => array(
                'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Accept-Language' => 'Accept-Language=pl,en-us;q=0.7,en;q=0.3'
            ),
            'compress' => true,
            'redirect' => 3,
            'connecttimeout' => 10,
            'timeout' => 10
        );

        $this->cookies = array();
    }

    private function add_cookies($cookies)
    {
        $this->cookies = array_merge($this->cookies, $cookies);
    }

    private function update_cookies($response)
    {
        $headers = $response->getHeaders();
        
        if(array_key_exists('Set-Cookie', $headers)) {
            $cookies = http_parse_cookie(implode(';', $headers['Set-Cookie']));
            $this->add_cookies($cookies->cookies);
        }
    }

    public function get_phase()
    {
        return $this->phase;
    }

    public function initialize()
    {
        $request = new HttpRequest('http://www.stat.gov.pl/regon/', HttpRequest::METH_GET, $this->options);

        $response = $request->send();
        $this->update_cookies($response);

        $this->phase = self::INITIALIZED_PHASE;
    }

    public function fetch_captcha()
    {
        if($this->phase < self::INITIALIZED_PHASE)
            throw new Exception('Cannot get captcha until initialized phase');

        if(!isset($this->captcha))
        {
            $request = new HttpRequest('http://www.stat.gov.pl/regon/Captcha.jpg?' . rand(1, 999), HttpRequest::METH_GET, $this->options);
            $request->setCookies($this->cookies);

            $response = $request->send();
            $this->update_cookies($response);
            $this->captcha = $request->getResponseBody();  
        }

        $this->phase = self::CAPTCHA_PHASE;

        return $this->captcha;
    }

    public function send_request($captcha, $nip)
    {
        if($this->phase != self::CAPTCHA_PHASE)
            throw new Exception('Cannot send request unless in captcha phase');

        $post_fields = array(
            'queryTypeRBSet' => '1nip',
            $captcha . '00' => '',
            $captcha . '11' => $nip,
            'verifCodeTF' => $captcha
        );

        $request = new HttpRequest('http://www.stat.gov.pl/regon/', HttpRequest::METH_POST, $this->options);

        $this->add_cookies(array(
            'lastCritIx' => '1',
            'isAmbiguousAnswer' => 'false',
            'toGenerNewVerifCode' => 'false',
            'cCodeHistory' => $captcha,
            'openingPageType' => '',
            'focusedObjIdGlobal' => 'verifCodeTF',
            'focusedObjCursorPos' => '5',
            'lastCCode' => $captcha,
            'criterion1TF' => $nip,
            'browser' => 'FF-21.0',
            'testCookie' => ''
        ));

        $request->setPostFields($post_fields);
        $request->setCookies($this->cookies);
        $response = $request->send();
        $this->update_cookies($response);

        $this->phase = self::COMPLETED_PHASE;

        $this->info = $request->getResponseBody();
    }

    public function get_response()
    {
        if($this->phase != self::COMPLETED_PHASE)
            throw new Exception('Cannot get response until it\'s sent');

        return $this->info;
    }
}

Przykładowe użycie:

Kopiuj
<?php

require 'NipRequest.class.php';

session_start();

if(!isset($_SESSION['request']) || isset($_GET['reset']))
    $_SESSION['request'] = new NipRequest();
$request = &$_SESSION['request'];

if(isset($_GET['captcha'])) {
    header('Content-type: image/jpeg');
    
    print $request->fetch_captcha();
} else {
    if($request->get_phase() < NipRequest::INITIALIZED_PHASE)
        $request->initialize();

    if($request->get_phase() > NipRequest::CAPTCHA_PHASE || (isset($_POST['captcha']) && isset($_POST['nip']))) {
        if($request->get_phase() != NipRequest::COMPLETED_PHASE)
            $request->send_request($_POST['captcha'], $_POST['nip']);

        print $request->get_response();
    } else {
        ?>
            <img src="?captcha">
            <form method="post">
                captcha: <input type="text" name="captcha"><br>
                nip: <input type="text" name="nip"><br>
                <input type="submit" value="wyslij">
            </form>
        <?php
    }
}
edytowany 2x, ostatnio: Rev
MC
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:1
0

Czy można to samo osiągnąć za pomocą samego Curl'a ?

dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 18 godzin
  • Lokalizacja:Rzeszów
0

i tak, i nie, zależy o co pytasz

po stronie serwera (php) curl wystarczy, ale musisz wysłać captchę do oglądającego stronę, curlem captchy nie pokonasz ;)


RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

W sensie użyć cURL zamiast pecl http? Tak, bo w gruncie rzeczy ten drugi jest tylko nakładką na tego pierwszego. W swojej przykładowej klasie użyłem go ze względu na lepszą integrację z PHP oraz wbudowane parsowanie nagłówków, w tym ciasteczek. To ostatnie jest tutaj kluczowe i w przypadku korzystania z cURL trzeba by je ręcznie parsować.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)