Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > [PHP]отправка данных на неком сайте


Автор: len4ixa 13.6.2009, 12:11
Люди, конкретно столкнулась именно с такой задачей, и меня замкнуло. Нужно, не посещая некий чужой сайт через браузер (ну точнее не посещая его вручную), зайти на его страницу, ввести в некое поле на этой странице данные и нажать на кнопочку возле этого поля для передачи этих данных. Как я могу это прописать? Ну то-есть шаблончик скиньте плз. Удобнее всего через пхп скрипт, выложенный далее на неком моем хостинге, так что предлагайте, или говорите, что еще надо для этого. 

Автор: bars80080 13.6.2009, 12:13
в таких случаях советуют читать использование библиотеки cURL. в этом случае можно будет по указанному адресу со своего сервера отправить данные методом post

Автор: len4ixa 13.6.2009, 12:47
Добавлено @ 12:52
Читнулась немного, вопрос есть, а как название той формы, куда вводишь данные узнать. Ну я не совсем поняла алгоритм, как находится то поле ввода текста там, куда отправляешь запрос

Автор: icewind 13.6.2009, 12:54
Тогда сокеты в помощь ( http://www.jonasjohn.de/snippets/php/post-request.htm )

Автор: len4ixa 13.6.2009, 13:05
Тьфу с именем. Ща попробую

Добавлено @ 13:10
А конкретно можно пример? нужно ввести юрл в поле посередине http://anon.rengo.ru/ лучше с помощью сокетов, так как про curl не уверена

Автор: underW 13.6.2009, 13:41
вот тебе пример,  работает на ура, скажу я вам smile 

Код

<php


function Send($url, $data = "", $method = "get", $cookies = "")
  {
    $arr = parse_url($url);
 
    $nn = "\r\n";
    $host = $arr["host"];
    $ref = $arr["scheme"]."//$host";
    $path = $arr["path"];
 
    if (isset($arr['query'])) $query = $arr["query"];
 
    if (isset($query) && !empty($query)) $path.="?".$query;
 
    $request = strtoupper($method)." $path HTTP/1.0".$nn.
               "Referer: $ref".$nn.
               ($cookies ? "Cookie: ".$cookies.$nn : "").
               "Connection: Keep-Alive".$nn.
               "Cache-Control: no-cache".$nn.
               "Content-Type: application/x-www-form-urlencoded".$nn.
               "Content-Length: ".strlen($data).$nn.
               "Host: $host".$nn.
               "Accept: */*".$nn.
               "Accept-Encoding: gzip, deflate".$nn.
               "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2)".$nn."".$nn.
               $data;
 
    //echo nl2br($request).'<br /><br /><br /><br />';
    //exit;
 
    $fp = fsockopen($host, 80, &$errno, &$errstr, 30);
 
    //echo "<br><br>socket открыт:".$fp;
 
    if(!$fp) { print "$errstr ($errno)<br>\n"; exit; }
    fputs($fp, $request);
 
    //echo "<br>ответ: ".fgets($fp);
 
    while(!feof($fp))
    {
      @$reply .= fgets($fp);
    }

    fclose($fp);
 
    return $reply;
 fclose($fp);

  }



$url="http://site.ru";

$text="bla-bla-bla";

$data = Send($url, $text, "post", "");
?>

Автор: len4ixa 13.6.2009, 13:48
Не, конкретно на вышеприведенный сайт, плз

Автор: skyboy 13.6.2009, 14:30
по причине нежелания автора принимать участие в разработке, тема перемещена в "Центр помощи" из "PHP:Общие вопросы "

Автор: len4ixa 13.6.2009, 14:34
Хорошо. Это не домашка хахахахахахаха=) Просто в этой области я еще мало с чем встречалась

Автор: len4ixa 14.6.2009, 12:54
решила делать с помощью curl
Смотрите, форма такая:
Код

<td valign="middle" align="center" width="1%"> 
              <input type="hidden" name="session" value="demo">
              <input type="hidden" name="form" value="header">
              <input type="text" name="url" value="http://" size="35" style="font-size: 9pt;">
            </td>
            <td width="49%" align="left" nowrap>
              <a href="javascript:document.forms[0].submit();"><img src="/images/view.gif" width="85" height="21" border="0" alt="Show" name="view"></a>
            </td>

Я сделала так, но оно не работает. Что напутала?
(Вот так сделалаsmile
Код

<?php
$ch=curl_init();//инициализируем сеанс
//здесь авторизируемся на сайте   
$url="http://www.anonymizer.ru//";   
$ch = curl_init(); 
// cURL будет выводить подробные сообщения о всех производимых действиях
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);   
// url страницы для авторизации   
curl_setopt($ch, CURLOPT_URL, $url);   
//вернуть результат запроса в переменную, а не на экран   
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);   
// используем метод POST    
curl_setopt($ch, CURLOPT_POST, 1);   
// данные передаваемые POST запросом   
curl_setopt($ch, CURLOPT_POSTFIELDS, "session=weka.ipb.su");   
//сохранять полученные COOKIE в файл   
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
// при получении HTTP заголовка "Location: " будет происходить перенаправление
// на указанный этим заголовком URL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_REFERER, $referer);   
//запускаем   
$result = curl_exec($ch);
  
       
curl_close($ch);     
       
echo $result;
?>

Автор: len4ixa 14.6.2009, 13:12
Что-то тут долго ответа дожидаться прийдется=(  

Автор: icewind 15.6.2009, 14:12
Что не работает конкретно? Что скрипт делает и сто по вашим ожиданиям должен? И зачем 2 раза инициализировать курл?

Автор: len4ixa 17.6.2009, 22:00
1)В итоге мне показывается сайт, на который я пытаюсь отправить данные, без картинок. 
2)Я же уже писала, ну скажу более четко: нужно в окно сверху на сайте anonymizer.ru написать этот сайт weka.ipb.su и отправить.
3)Да, один косяк уже есть с инициализацией, но на работу скрипта он все-равно не влияет

Автор: icewind 17.6.2009, 23:29
У вас происходит то, что и должно. Вы после выполнения запроса к удаленному серверу распечатали его ответ, а это html страница. Картинок нет потому что пути у них скорее всего относительные.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)