【问题标题】:trying to grab data from a page after post via curl通过 curl 发布后尝试从页面中获取数据
【发布时间】:2010-04-25 19:31:24
【问题描述】:

我正在尝试从这里获取数据:http://mediaforest.biz/mobile/nowplaying.aspx 在页面中,您选择一个电台并发布它,然后您将获得包含数据的新页面。但我不能抓住它,我又得到了相同的页面。

我使用了这个代码:

<?php
header ('Content-type: text/html; charset=utf-8');

$url = "http://mediaforest.biz/mobile/nowplaying.aspx";
$referer = "";

// headers
$header[] = "Host: ".parse_url($url, PHP_URL_HOST);
$header[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
$header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$header[] = "Accept-Language: he,en-us;q=0.7,en;q=0.3";
$header[] = "Accept-Encoding: gzip,deflate";
$header[] = "Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.7";
$header[] = "Keep-Alive: 115";
$header[] = "Connection: keep-alive";

$cookie="cookie.txt";
$fp=fopen($cookie,"w+");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_REFERER,$referer);
curl_setopt($ch, CURLOPT_TIMEOUT, 900);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER,true);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
curl_setopt($ch, CURLOPT_VERBOSE, 0);

$content=curl_exec($ch);
echo $content;

    if(stristr($content,"__EVENTTARGET")){
        $array1=explode('__EVENTTARGET" value="',$content);
        $content1=$array1[1];
        $array2=explode('">
<input type="hidden" name="__EVENTARGUMENT"',$content1);
        $content2=$array2[0];
        $EVENTTARGET=urlencode($content2);
    }

    if(stristr($content,"__EVENTARGUMENT")){
        $array1=explode('__EVENTARGUMENT" value="',$content);
        $content1=$array1[1];
        $array2=explode('">
<script language',$content1);
        $content2=$array2[0];
        $EVENTARGUMENT=urlencode($content2);
    }

    if(stristr($content,"formNowPlaying")){
        $array1=explode('method="post" action="',$content);
        $content1=$array1[1];
        $array2=explode('">
<input type="hidden" name="__EVENTTARGET"',$content1);
        $content2=$array2[0];
        $nexturl=$content2;
    }

//echo $EVENTTARGET." ".$EVENTARGUMENT." ".$nexturl;

$url = "http://mediaforest.biz/mobile/".$nexturl;

$fields = "EVENTTARGET=".$EVENTTARGET."&__EVENTARGUMENT=".$EVENTARGUMENT."&MyChannels=0&ViewChannel_Button=Show"; 

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_REFERER,$referer);
curl_setopt($ch, CURLOPT_TIMEOUT, 900);
curl_setopt($ch, CURLOPT_FAILONERROR, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER,true);
curl_setopt($ch, CURLOPT_COOKIEFILE,$cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
curl_setopt($ch, CURLOPT_VERBOSE, 1);

$content_stage2=curl_exec($ch);
echo $content_stage2;
?>

【问题讨论】:

  • 谢谢 :) 这个问题呢???我被卡住了!

标签: php post curl asp.net


【解决方案1】:

如果您从第一个请求中获取数据,请尝试在之后关闭(针对每个请求)。

$content=curl_exec($ch); 
curl_close($ch); 
echo $content;

$content_stage2=curl_exec($ch);
curl_close($ch);    
echo $content_stage2; 

【讨论】:

  • 我做到了,得到了同样的结果,也许没关系。
【解决方案2】:

我对cURL没有太多经验,也没有研究过,但乍一看似乎是这样的:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

必须是这样的:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

可能是错的。

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多