Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Analiza zapytań http, Automatyzacja wysyłki do formularza (curl)
Raptor1
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.09.2005

Ostrzeżenie: (0%)
-----


Witam wszystkich.

Pisze właśnie automat do automatyzacji uzupełniania formularza na zewnętrznej stronie do której nie mam dostępu od strony ftp.
Do odwoła używam biblioteki curl. Problem polega na analizie zapytań w momencie kiedy strona robi przekierowanie nie wyświetlając ani błedu anni komunikatu jedynie przekierowuje na strone z informacją że zapytanie jest błedne. Wydaje mi się że wysyłam wszystkie parametry jakie są oczekiwane na następnym kroku ale prawdopodobnie jestem jakoś wykrywany lub poprostu robie coś źle. poniżej fragment kodu

  1. function get_headers_from_curl_response($response)
  2. {
  3. $headers = array();
  4.  
  5. $header_text = substr($response, 0, strpos($response, "\r\n\r\n"));
  6.  
  7. foreach (explode("\r\n", $header_text) as $i => $line)
  8. if ($i === 0)
  9. $headers['http_code'] = $line;
  10. else
  11. {
  12. list ($key, $value) = explode(': ', $line);
  13.  
  14. $headers[$key] = $value;
  15. }
  16.  
  17. return $headers;
  18. }
  19.  
  20. function get_body_from_curl_response($response)
  21. {
  22. return substr($response, strpos($response, "\r\n\r\n") + 4 );
  23. }
  24.  
  25. // jeśli nie ma to obsługuje ale nie dodaje pliku
  26.  
  27.  
  28. $tmpCookieFilePath = __DIR__ . '/tmp';
  29. $tmpCookieFile = $tmpCookieFilePath . '/cookie_' . microtime(true) . '.txt';
  30. file_put_contents($tmpCookieFile, '');
  31. chmod($tmpCookieFile,0777);
  32.  
  33.  
  34. // $tmpCookieFile = '';
  35. $visaTypeNo = 3;
  36. $postData = 'service_requested=' . $visaTypeNo;
  37. $agentUser = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0';
  38. $sslOn = 1;
  39. $followlocation = 1;
  40. $returnTransfer = 1;
  41. $curlPost = 1;
  42. $cookieSession = 1;
  43.  
  44. $ch = curl_init();
  45.  
  46. // etap 1 wejście w sesje formularzy
  47.  
  48. curl_setopt( $ch, CURLOPT_URL, 'https://indianvisaonline.gov.in/visa/Registration');
  49. curl_setopt( $ch, CURLOPT_HEADER, 1 ); // pobieram nagłówek
  50. curl_setopt( $ch, CURLOPT_POSTFIELDS, $postData ); // dane post
  51. curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, $sslOn ); // wyłaczam werifikacje ssl
  52. curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, $sslOn ); // wyłaczam werifikacje ssl
  53. curl_setopt( $ch, CURLOPT_USERAGENT, $agentUser );
  54. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, $returnTransfer ); // pobieram body
  55. curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, $followlocation ); // podążam za lokacją
  56. curl_setopt( $ch, CURLOPT_COOKIESESSION, $cookieSession );
  57. curl_setopt( $ch, CURLOPT_COOKIEJAR, $tmpCookieFile ); // - określam plik ciasteczek
  58. curl_setopt( $ch, CURLOPT_REFERER, "https://indianvisaonline.gov.in/visa/tvoa.html" ); // dowiązanie z poprzedniej strony
  59. curl_setopt( $ch, CURLOPT_POST, $curlPost ); // post jest przesyłany
  60.  
  61. $data = curl_exec($ch);
  62. $info = curl_getinfo($ch);
  63.  
  64. if( !empty($data) && $info['http_code'] == 200 ){
  65. $headerData = get_headers_from_curl_response($data);
  66. $bodyData = get_body_from_curl_response($data);
  67. $cookieData = explode(';', $headerData['Set-Cookie']);
  68.  
  69. foreach( $cookieData as $cData ) {
  70. if( preg_match('/^JSESSIONID/', $cData ) ) {
  71. $sessionCookieData = $cData;
  72. }
  73. }
  74. }
  75.  
  76. echo $bodyData;
  77.  
  78. // pobieram token
  79.  
  80. $dom = new DOMDocument();
  81. $dom->loadHTML($bodyData);
  82.  
  83. // name
  84. $elements = $dom->getElementsByTagName('input');
  85.  
  86. foreach ($elements as $element) {
  87. if( $element->getAttribute('name') == 'token' ) $token = $element->getAttribute('value');
  88. }
  89.  
  90. // generate image url
  91.  
  92. $output = curl_exec( $ch );
  93. $info = curl_getinfo( $ch );
  94.  
  95. $time_stamp = number_format(microtime(true)*1000,0,'.','');
  96. $url = "https://indianvisaonline.gov.in/visa/captcha?rand=" . $time_stamp;
  97. $urlRef = 'https://indianvisaonline.gov.in/visa/Registration?service_requested=3';
  98.  
  99. $args = array(
  100. 'returnTransfer' => $returnTransfer,
  101. 'sslOn' => $sslOn,
  102. 'agentUser' => $agentUser,
  103. 'followlocation' => $followlocation,
  104. 'cookieSession' => $cookieSession,
  105. 'tmpCookieFile' => $tmpCookieFile,
  106. 'url' => $url,
  107. 'urlRef' => $urlRef
  108. );
  109.  
  110. // form 2 pobranie tekstu z obrazka captcha - używam serwisu anti captcha
  111. $captaResult = getCaptcha( $args, $ch );
  112.  
  113. $currDate = date('d/m/Y');
  114. $arrivalDateMin = date('d/m/Y', strtotime( '+4 day', $currDate ));
  115. $arrivalDateMax = date('d/m/Y', strtotime( '+34 day', $currDate ));
  116.  
  117. $email = 'ala@op.pl';
  118. $nationality = 'POL';
  119. $jurneyDate = '25/12/2016';
  120. $birthdate = '04/11/1996';
  121. $portOfArival = 'I022';
  122.  
  123. /*
  124.  * Pola
  125.  * appl.birthdate
  126.  * appl.email
  127.  * appl.email_re
  128.  * appl.journeydate
  129.  * appl.missioncode
  130.  * appl.nationality
  131.  * appl.ppt_type_id
  132.  * captcha
  133.  * submit_registration=Continue
  134.  * token
  135.  *
  136.  */
  137.  
  138. // etap 2 przejście z 1 do 2 formularza
  139. $postData = array(
  140. 'appl.birthdate' => $birthdate,
  141. 'appl.email' => $email,
  142. 'appl.email_re' => $email,
  143. 'appl.journeydate' => $jurneyDate,
  144. 'appl.missioncode' => $portOfArival,
  145. 'appl.nationality' => $nationality,
  146. 'appl.ppt_type_id' => 1,
  147. 'captcha' => $captaResult,
  148. 'submit_registration' => 'Continue',
  149. 'token' => $token,
  150. );
  151.  
  152. $postData = http_build_query( $postData );
  153.  
  154. curl_setopt( $ch, CURLOPT_URL, 'https://indianvisaonline.gov.in/visa/Registration');
  155. curl_setopt( $ch, CURLOPT_HEADER, 1 ); // pobieram nagłówek
  156. curl_setopt( $ch, CURLINFO_HEADER_OUT, true ); // pobieram nagłówek
  157. curl_setopt( $ch, CURLOPT_POSTFIELDS, $postData );
  158. curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, $sslOn ); // wyłaczam werifikacje ssl
  159. curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, $sslOn ); // wyłaczam werifikacje ssl
  160. curl_setopt( $ch, CURLOPT_USERAGENT, $agentUser );
  161. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, $returnTransfer ); // pobieram body
  162. curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, $followlocation ); //$followlocation ); // podążam za lokacją
  163. curl_setopt( $ch, CURLOPT_COOKIESESSION, $cookieSession );
  164. curl_setopt( $ch, CURLOPT_COOKIEFILE, $tmpCookieFile ); // - określam plik ciasteczek
  165. curl_setopt( $ch, CURLOPT_REFERER, 'https://indianvisaonline.gov.in/visa/Registration?service_requested=3' ); // dowiązanie z poprzedniej strony
  166. curl_setopt( $ch, CURLOPT_POST, $curlPost ); // post jest przesyłany
  167.  
  168. $data = curl_exec($ch);
  169. $info = curl_getinfo($ch);
  170.  
  171. $bodyData = '';
  172.  
  173. if( !empty($data) && $info['http_code'] == 200 ){
  174. $headerData = get_headers_from_curl_response($data);
  175. $bodyData = get_body_from_curl_response($data);
  176. }
  177.  
  178. var_dump( $info );
  179. var_dump( $bodyData );


Formularz składa się z kilku etapów natomiast narazie mam problem z określeniem co może być przyczyną przekierowania mnie na adres https://indianvisaonline.gov.in/visa/invalid.html zamiast przejście na stronę https://indianvisaonline.gov.in/visa/BasicDetails. Ścieżka wejścia na formularz ze strony to wejście na adres https://indianvisaonline.gov.in/visa/tvoa.html i kliknięcie przycisku w menu górnym "e-Tourist Visa Application". Oczywiście moim zamiarem nie jest włamanie do formularza tylko zautomatyzowanie pracy w biurze aby nie trzeba było za każdym razem wpisywać tych samych danych do crm i do formularza na stronie.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 00:07