CURL PHP - Сделать POST запрос на сайт помогите

Discussion in 'PHP' started by Danir, 10 Jan 2013.

  1. Danir

    Danir New Member

    Joined:
    1 May 2012
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте! Помогите мне пожалуйста(

    Есть сайт и там код

    <form action="site.ru/obrabotka" method="post">
    <input type="hidden" name="hash" value="3e6e2f12c4f5aa4e074d1a636a3ae16f" />
    <input type="hidden" name="username" value="Imya" />
    <textarea name="message" class="input-textarea"></textarea>
    <button type="submit" class="input-button" style="width: 100%;"><b>Отправить</b></button>
    </form>

    Мне нужно сделать запрос со своего сервера получается и чтобы он постом отправил три переменные, а hash то тоже надо получить чтобы его отправить.

    Напишите пожалуйста как это будет выглядеть?
     
  2. justonline

    justonline network ninja

    Joined:
    27 Jul 2011
    Messages:
    499
    Likes Received:
    60
    Reputations:
    53
    это будет выглядеть так -
    1. Запрос к сайту, парсим хеш.
    2. Формируем пост запрос к сайту.
     
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    139
    Reputations:
    4
    https://www.google.by/#hl=ru&tbo=d&sclient=psy-ab&q=php+curl+post+example&oq=php+curl+post&gs_l=hp.3.1.0l4.3801.6946.0.9134.13.10.0.1.1.0.641.2709.0j6j2j5-2.10.0...0.0...1c.1.gHzcDfmOec0&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.&bvm=bv.1357700187,d.Yms&fp=535374f833e3220f&biw=1366&bih=641
     
  4. kolia

    kolia Elder - Старейшина

    Joined:
    11 Oct 2012
    Messages:
    290
    Likes Received:
    398
    Reputations:
    16
    Code:
    function request($url,$step,$request_type,$protocol,$hd,$post_data,$proxy_enable,$proxy_socks4_enable,$proxy_ip,$proxy_port)
     {
      echo "<br>Выполняем $step шаг...";
      //ФОрмируем прокси для curl-а
       $proxy_for_curl=$proxy_ip.':'.$proxy_port;
      
      while(!$output)
       {
          //print_r($hd);
          //Настраиваем задачу для curl_multi
           $fp_curl = curl_init();
          //Открываем файл для печати в него отладочной информации курла (Напечатаются все заголовки и данные которые мы отправляем)
           $fh_debug = fopen('curl_send_headers/step_$step.txt','w');
          //Настраиваем curl
           curl_setopt($fp_curl, CURLOPT_HEADER,1);
           curl_setopt($fp_curl, CURLOPT_VERBOSE, 1);
           curl_setopt($fp_curl, CURLOPT_HTTPHEADER, $hd ); //Этот curl_setopt должен быть раньше всух остальных setopt, инаяе начнется наслоение курловских заголовков и моих
          //Выбираем протокол
           if($protocol=="HTTP")
            {
    
    	}
           elseif($protocol=="HTTPS")
    	{
             curl_setopt($fp_curl, CURLOPT_SSL_VERIFYPEER, 0);
    	}
          //Включаем использование прокси
           if($proxy_enable==1){curl_setopt($fp_curl, CURLOPT_PROXY, $proxy_for_curl);}else{}
          //Включаем SOCKS4 прокси
           if($proxy_socks4_enable==1){curl_setopt($fp_curl,CURLOPT_PROXYTYPE,CURLPROXY_SOCKS4);}else{}
          curl_setopt($fp_curl, CURLOPT_TIMEOUT, 70);
          curl_setopt($fp_curl, CURLOPT_CONNECTIONTIMEOUT, 20);
          curl_setopt($fp_curl, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($fp_curl, CURLOPT_URL, $url);
          //curl_setopt($fp_curl, CURLOPT_POST, 1);
          //curl_setopt($fp_curl, CURLOPT_POST, "Content-Type: multipart/form-data");
          //Выбираем тип запроса
           if($request_type=="GET")
            {
      
    	}
           elseif($request_type=="POST")
            {
             curl_setopt($fp_curl, CURLOPT_POSTFIELDS, $post_data);
            }
          curl_setopt($fp_curl, CURLOPT_AUTOREFERER,1);
          curl_setopt($fp_curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
          curl_setopt($fp_curl, CURLOPT_STDERR, $fh_debug);
         //Запускаем задачу на исполнение
          $output=curl_exec($fp_curl); 
         //Закрываем сеанс curl
          curl_close($fp_curl);    
         //Записываем страницу
          $fp_page=fopen("page.txt","w+");
          fwrite($fp_page,$output);
          fclose($fp_page);
         //Закрываем отладочный дескриптор
          fclose($fh_debug); 
    
       //Меняем некоторые настройки курла специально для конкретного шага, если это нужно..
       if($step==1)
        {
         
        }
       elseif($step==2) 
        {
    
        }
       else
        {
    
        }
      }    
      return $output;
     }
    
    
    
    function page_formation($page,$what_return,$step)
     {
      global $post_data;
      //Разделяем страницу на заголовки и тело
       unset($full_page[$key_read_socket_curl]);
       $full_page[$key_read_socket_curl]=explode("\r\n\r\n",$page);
       $headers[$key_read_socket_curl]=$full_page[$key_read_socket_curl][0];
       $body[$key_read_socket_curl]=$full_page[$key_read_socket_curl][1];
      //Разжимаем страницу:
       $ungzipped_body[$key_read_socket_curl]=@gzinflate(substr($body[$key_read_socket_curl],10));
       $ungzipped_full_page[$key_read_socket_curl]=$headers[$key_read_socket_curl]."\r\n\r\n".$ungzipped_body[$key_read_socket_curl];
      //Записываем разжатую страницу в файл.
        $hand=fopen("ungzipped_full_page_step_$step.txt","w+");
        fwrite($hand,"\r\n\r\n1)ungzipped_full_page:\r\n".$ungzipped_full_page[$key_read_socket_curl]);
        fwrite($hand,"\r\n\r\n2)ungzipped_body:\r\n".$ungzipped_body[$key_read_socket_curl]);
        fwrite($hand,"\r\n\r\n3)body:\r\n".$body[$key_read_socket_curl]);
        fwrite($hand,"\r\n\r\n4)headers:\r\n".$headers[$key_read_socket_curl]);
        fwrite($hand,"\r\n\r\n5)post_data:\r\n".$post_data);    
        fclose($hand);
      if($what_return=="ungzipped_full_page")
       {
        return $ungzipped_full_page[$key_read_socket_curl];
       }
      elseif($what_return=="ungzipped_body")
       {
        return $ungzipped_body[$key_read_socket_curl];
       }
      elseif($what_return=="body")
       {
        return $body[$key_read_socket_curl];
       }
      elseif($what_return=="headers")
       {
        return $headers[$key_read_socket_curl];
       }
      else
       {
        echo "<br>Не верно указан параметр what_return для функции page_formation()";
       }
     }
    
    
    //Запуск, страница будет в $page после отработки двух нижеследующих строк
    //+у функции page_formation() втоорй параметр указывает на то, в каком виде мы хотим получить страницу. ТОлько заголовки, тело, разжатое тело, заголовки+разжатое тело. Выбирайте один из 4 вариантов.
       $page=request("http://ya.ru","3","GET","HTTPS",$hd,"",0,0,"ip","port");
       $page=page_formation($page,"ungzipped_full_page",1);