Создание POST-запроса с использованием Curl, не работает - PullRequest
0 голосов
/ 14 марта 2012

Я хочу сделать POST-запрос, чтобы получить расписание поездов с этой страницы: http://www.indianrail.gov.in/train_Schedule.html

Я использую этот код, но он НЕ работает.Полученная ошибка показана во вложении ниже. В чем может быть проблема?
PS: у меня есть путь и аргументы cgi, как в $ data с использованием Firebug

$data = array('lccp_trnname' => '14553', 'getIt' => 'Get Schedule');

    $ch = curl_init();
    $useragent= "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1";
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent); // set user agent
    curl_setopt($ch, CURLOPT_URL, 'http://www.indianrail.gov.in/cgi_bin/inet_trnnum_cgi.cgi');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

    $txResult = curl_exec($ch);

    print "$txResult\n";

enter image description here:

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Если у вас есть разрешение на программное использование данных на этом сайте ......

Проблема заключается в том, как вы передаете данные поста в cURL.

CURLOPT_POSTFIELDS

Полные данные для отправки в HTTP-операции «POST».Чтобы опубликовать файл, добавьте @ к имени файла и используйте полный путь.Тип файла можно явно указать, следуя имени файла с типом в формате '; type = mimetype'.Этот параметр может быть передан в виде строки в кодировке urlen, например, 'para1 = val1¶2 = val2 & ...', или в виде массива с именем поля в качестве ключа и данными поля в качестве значения.Если значение является массивом, заголовок Content-Type будет установлен в multipart / form-data.Начиная с PHP 5.2.0, файлы, которые передаются в эту опцию с префиксом @, должны работать в виде массива.

http://php.net/manual/en/function.curl-setopt.php

Попробуйте самостоятельно кодировать данные поста и передавать их какстрока:

$data = array('lccp_trnname' => '14553', 'getIt' => 'Get Schedule');

$fields_string = '';
foreach($data as $key=>$value) { $fields_string .= urlencode($key).'='.urlencode($value).'&'; }
rtrim($fields_string,'&');

Затем установите параметр:

curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
0 голосов
/ 14 марта 2012

Вам нужны две вещи:

реферер
и POST-данные application / x-www-form-urlencoded

$params = 'lccp_trnname='.urlencode('14553').'&getIt='.urlencode('Get Schedule');
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch,CURLOPT_REFERER, "http://www.indianrail.gov.in/train_Schedule.html");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...