使用Curl发出POST请求,而不是工作

时间:2012-03-14 10:29:58

标签: php curl

我想发一个POST请求,以便从此页面获取列车编号的时间表:http://www.indianrail.gov.in/train_Schedule.html

我正在使用此代码,但它无效。结果错误显示在下面的附件中。 可能是什么问题?
PS:我使用Firebug

获得了$ data中的cgi路径和参数
$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 个答案:

答案 0 :(得分:1)

假设您有权以编程方式使用该网站上的数据......

问题是您将帖子数据传递给cURL的方式。

CURLOPT_POSTFIELDS

要在HTTP“POST”操作中发布的完整数据。要发布文件,请在文件前加上@并使用完整路径。可以通过使用格式为'; type = mimetype'的类型的文件名来明确指定文件类型。此参数可以作为urlencoded字符串传递,如'para1 = val1& para2 = val2& ...',或者作为一个数组,字段名称为键,字段数据为值。如果value是数组,则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);

答案 1 :(得分:0)

你需要两件事:

推荐人
“application / x-www-form-urlencoded”POST数据

$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");