За последние 24 часа нас посетили 51720 программистов и 1767 роботов. Сейчас ищут 839 программистов ...

Отправка HTTP POST запроса

Тема в разделе "PHP для новичков", создана пользователем hugi, 13 апр 2008.

Статус темы:
Закрыта.
  1. hugi

    hugi Активный пользователь

    С нами с:
    24 авг 2007
    Сообщения:
    30
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3. $url = "http://www.kreativ.realkran.ru/up.php?_fio=Petya Vasechkin&_email=Petya Vasechkin&_psev=Petya Vasechkin&_name=Petya Vasechkin&_com=Petya Vasechkin";  
    4. // при помощи этой функции разбиваем адрес на массив, который будет содержать хост, путь и список переменных.  
    5. $parse_url = parse_url($url);
    6.  
    7. $path = $parse_url["path"];  
    8. // если есть список параметров  
    9. if($parse_url["query"])  
    10.     // добавляем к пути до файла список переменных(?var=23&var2=54)  
    11.     $path .= "?" . $parse_url["query"];  
    12. // тут получаем хост (test.ru)  
    13. $host= $parse_url["host"];  
    14. // а вот тут создаем список переменных с параметрами. Эти данные будут переданы через POST. Все значения переменных обязательно нужно кодировать urlencode ("еще тест")  
    15.  
    16.  
    17. $fp = fsockopen($host, 80, $errno, $errstr, 10);
    18. if ($fp) echo "true";
    19.     else echo "false";  
    20. if ($fp)  
    21. {  
    22.  
    23. $out = "POST ".$url." HTTP/1.1\r\n";  
    24. $out .= "Host: ".$host."\r\n";  
    25. $out .= "Referer: ".$url."\r\n";
    26. $out .= "Cookie: income=1\r\n";    
    27. $out .= "Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n";
    28. $out .= "Content-Length: 1024\r\n\r\n";
    29. $out .= "--1BEF0A57BE110FD467A\r\n";    
    30. $out .= "Content-Disposition: form-data; name=\"_fio\"\r\n\r\n";
    31. $out .= "Petya Vasechkin\r\n";
    32. $out .= "--1BEF0A57BE110FD467A\r\n";
    33. $out .= "Content-Disposition: form-data; name=\"_email\"\r\n\r\n";
    34. $out .= "milo@ya.ru\r\n";
    35. $out .= "--1BEF0A57BE110FD467A\r\n";
    36. $out .= "Content-Disposition: form-data; name=\"_psev\"\r\n\r\n";
    37. $out .= "Petya Vasechkin\r\n";
    38. $out .= "--1BEF0A57BE110FD467A\r\n";
    39. $out .= "Content-Disposition: form-data; name=\"_name\"\r\n\r\n";
    40. $out .= "Petya Vasechkin\r\n";
    41. $out .= "--1BEF0A57BE110FD467A\r\n";
    42. $out .= "Content-Disposition: form-data; name=\"zak\"; filename=\"text.txt\"\r\n";
    43. $out .= "Content-Type: application/octet-stream\r\n";
    44. $out .= "Content-Transfer-Encoding: binary\r\n\r\n";
    45. $out .= "Content-Disposition: form-data; name=\"_com\"\r\n\r\n";
    46. $out .= "Petya Vasechkin\r\n";
    47. $out .= "--1BEF0A57BE110FD467A\r\n";
    48. echo $out;
    49.  
    50. fputs($fp, $out); // отправляем данные
    51. echo $errno;
    52. echo $errstr;  
    53. ?>
    54.  
    Тренируюсь в отправке пост запроса в формате multipart/form-data, fsockopen выдает тру, но запрос не доходит, нужна помощь, если запрос правильный, но работа не добавляется.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Пуск -> Выполнить -> Telnet www.kreativ.realkran.ru 80
    Далее набирай POST-запрос (можно copy/paste) и смотри что придет в ответ.
     
  3. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    По-моему, ты просто где-то спёр код и теперь хочешь чтобы тебе его верно перписали. Подозрительный ты супчик.

    Выдаёт тру потому что подсоеденение прошло. Ошибка потому что заголовки не прошли. Первое в POST Content-Length должен быть правильно указан. У тебя 1024 по всей видимости просто с потолка слетело. А должно быть strlen(всё, что ты отправляешь) или filesize(который ты читаешь).

    Или типа того.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Без учета загловков.
     
  5. telef

    telef Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    51
    Симпатии:
    0
    А можно ссылку где почитать о отправке post запросов?
    Хотелось бы понять какое поле за что отвечает.

    Мне например нужно отправить запрос с двумя переменными например var1=15 и var2=test
    что в приведенном примере нужно изменить?
     
  6. telef

    telef Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    51
    Симпатии:
    0
    Пытаюсь заставить скрипт авторизовываться через curl на почему то входа не происходит.
    выкладываю текст кода, скажите что неправильно делаю?

    Код (Text):
    1. $url = "http://tsn.spb.ru/company/index.php";
    2. $login = 'test1'; // логин
    3. $password = '123321123321'; // пассворд
    4. $submit='Войти';
    5. $ch = curl_init($url);  
    6. curl_setopt($ch, CURLOPT_TIMEOUT, 3); // Таймаут после 4 секунд
    7. curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MRA 4.6 (build 01425); .NET CLR 1.1.4322)');
    8. curl_setopt($ch, CURLOPT_REFERER,$url);
    9. curl_setopt($ch, CURLOPT_POST, 1); // Устанавливаем метод POST
    10. curl_setopt($ch, CURLOPT_POSTFIELDS, "referer=&t=&f=&st=login=$login&password=$password&submit=$submit&CookieDate=1"); // посылаемые значения
    11. $result = curl_exec($ch);  
     
  7. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    telef, ищи в интернете. Здесь никто не поможет, ибо любой пост запрос расценивается за попытки спама. Исключая XML RPC, конечно.
     
  8. telef

    telef Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    51
    Симпатии:
    0
    а причем тут спам если я хочу сделать скрипт захода в базу данных и проверки обновления?
     
  9. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Потому что потому. Потому что хз чья это база, ага.
    Если твоя проверяй высылая на почту. Или пользуй интернет для изучений POST-запросов.
     
  10. telef

    telef Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    51
    Симпатии:
    0
    если б была моя база, то я б сделал рассылку, а так приходится мучится!
     
  11. telef

    telef Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    51
    Симпатии:
    0
    Все разобрался!
    По примеру выше все работает.

    т.е. post отправляется, данные логин и пароль проверяются, но почему то вход не происходит :(

    может кто подскажет почему?
     
  12. telef

    telef Активный пользователь

    С нами с:
    23 дек 2006
    Сообщения:
    51
    Симпатии:
    0
    все разобрался надо было куки сохранять!

    PHP:
    1. curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
    2. curl_setopt($ch, CURLOPT_COOKIEJAR,  $user_cookie_file);
    Вопрос

    А как мне открыть вторую страницу с этими же куками?
     
  13. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    XML RPC. В противном случае - спамер.

    Баньте его, пацаны! Ногами его баньте! :)
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    как-то уж и в правду смахивает на
    Раз уж два раза разобрались, разберётесь и в третий.
    Тема закрыта.
     
Статус темы:
Закрыта.