Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35

Не отправляется post запрос (cURL)

22.03.2014, 10:55. Показов 3764. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Появилась необходимость спарсить вопросы для теста.
Парсить собираюсь отсюда http://myrusakov.ru/tests.html

Поначалу, чтобы попасть в тест, нам нужно перейти по ссылочке http://myrusakov.ru/starttest.php?id=1 , далее нас перенаправляет на страницу /test.html , вот на с неё и нужно будет парсить.
Скрипт должен сначала открывать страницу http://myrusakov.ru/starttest.php?id=1, получать там куку, далее открывать 10 раз страницу /test.html и парсить с неё вопросы с вариантами ответов, при этом отправляя post запрос, чтобы перейти к следующему вопросу теста.

Форма имеет три поля: variant (вариант ответа), question (id вопроса в бд) и answer (кнопка отправки формы)
Написал такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function get_web_page($url, $postt, $num) 
{ 
    $uagent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"; 
 
    $ch = curl_init( $url ); 
    
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_ENCODING, ""); 
    curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
    if($postt == 10){ // если мы решили отправить post запрос
        $data = array('variant' => '1', 'question' => $num, 'answer' => 'get'); 
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT']."cookie.txt");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }else{
        curl_setopt($ch, CURLOPT_POST, false);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT']."cookie.txt");
    }
        
    curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT']."cookie.txt");
    
    $content = curl_exec( $ch ); 
    $err     = curl_errno( $ch ); 
    $errmsg  = curl_error( $ch ); 
    $header  = curl_getinfo( $ch ); 
    curl_close( $ch ); 
 
    $header['errno']   = $err; 
    $header['errmsg']  = $errmsg; 
    $header['content'] = $content; 
    return $header; 
} 
 
$num_pattern = '/<input type="hidden" name="question" value="(.+?)" \/>/'; // регулярка для парсинга id вопроса
$num_question = 0;
$result = get_web_page('http://myrusakov.ru/starttest.php?id=1', 0, 0); // первоначальное открытие сайта для получения куки, чтобы начать проходить тест
preg_match($num_pattern, $result['content'], $num_question);
 
$question_pattern = "/<div id=\"question\">(.+)<\/div>/";
$answers_pattern = '/<p class="test-variant">(.+?)<\/p>/si';
 
$answers = "";
$answer_1 = "";
$answer_2 = "";
$answer_3 = "";
$answer_4 = "";
 
$result_parsing = array();
$url = 'http://myrusakov.ru/test.html'; 
 
for($i = 0; $i < 3; $i++){
    $result = get_web_page($url, 0, 0); // загружаем страницу
    $html = $result['content'];
    preg_match($question_pattern, $html, $question);
    preg_match_all($answers_pattern, $html, $answers);
    $answer_1 = substr($answers[0][0], 73);
    $answer_2 = substr($answers[0][1], 73);
    $answer_3 = substr($answers[0][2], 73);
    $answer_4 = substr($answers[0][3], 73);
    $result_parsing[$i] = array("question" => $question,
                                "answer_1" => $answer_1,
                                "answer_2" => $answer_2,
                                "answer_3" => $answer_3,
                                "answer_4" => $answer_4);   
    preg_match($num_pattern, $html, $num_question);
    get_web_page($url, 1, $num_question[1]); // отправляем форму
}
var_dump($result_parsing);
Собственно форма не отправляется, а в переменную $result_parsing заносятся одинаковые данные.
P.S. С курлом только познакомился, так что строго не судите.
P.S.S. С парсингом тоже не всё супер, но данные парсятся.

Почти сутки не могу решить проблему.
Помогите, пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2014, 10:55
Ответы с готовыми решениями:

Curl post запрос PHP
Не получается сформировать правильный post-запрос с помощью Curl PHP. Есть код: &lt;?php $post = ; $ch =...

Curl post запрос в формате multipart/form-data
Не получается разобраться с данным запросом. Требуется отправить post запрос - загрузить изображения на сервер Ожидает данные в...

Не отправляется post запрос на asp сайте
Пишу парсер с asp.net сайта.Столкнулся с проблемой скачивания файла отчёта со страницы. На странице есть кнопка скачивания файла...

1
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
24.03.2014, 02:01  [ТС]
Вопрос решил.
Ошибка была в том, что я передавал неправильный url. Я передавал "test.html", а надо было "test.php".
Тему можно закрывать или удалять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2014, 02:01
Помогаю со студенческими работами здесь

Неправильно отправляется Curl post
Добрый день, помогите, пожалуйста, разобраться. На сервер приходят все null, и хедер тоже null. Последний пример взял с офф. сайта с...

Не отправляется POST запрос
Всем доброе утро, такой вопрос, у меня есть форма, которая передает данные. данные я передаю на сервер через JS. Так вот, сам файл...

Не отправляется post запрос
не отправляется post запрос снифер не видет что запрос отправляется на http вот сам запрос char f; char postRequest; ...

Не отправляется POST запрос
При отправке Post запроса в ответ от сервера приходит сообщение, что post запрос был пустым, хотя я отправляю вроде все верно, в запросе...

Не отправляется POST запрос
Всем привет, новичок в разработке приложений, нарыл в инете код как отправлять запрос, вроде все по правилам делал и на всех сайтах...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru