2012-02-16 99 views
0

这是工作,直到最近还和我似乎无法破解的情况分析。接收来自服务器CSV和使用PHP

如果您手动访问在脚本中反对的URL,结果是那里..但如果我在代码中执行它,我遇到问题。

,你可以在我的输出测试我不再得到任何输出看到...

什么想法?

   <? 
       //$ticker=urldecode($_GET["ticker"]); 
       $ticker='HYG~FBT~'; 
       echo $ticker; 
       $tickerArray=preg_split("/\~/",$ticker); 
       // create curl resource 
         $ch = curl_init(); 


         // set urlm 
         curl_setopt($ch, CURLOPT_URL, "http://www.batstrading.com/market_data/symbol_data/csv/"); 




         //return the transfer as a string 

         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

         // $output contains the output string 
         $a=''; 

         $output = curl_exec($ch); 

          echo "<br><br>OUTPUT TEST: ".($output); 


       $lineCt=0; 
       $spaceCt=0; 
       $splitOutput=preg_split("[\n|\r]",$output); 




       for($ii=0;$ii<sizeof($tickerArray);$ii++){ 
       $i=0; 
       $matchSplit[$ii]=-1; 
         while($i<sizeof($splitOutput) && $matchSplit[$ii]==-1){ 



          $splitOutput2=preg_split("/\,/",$splitOutput[$i]); 
           if($i>0){ 

            if(strcasecmp($splitOutput2[0],strtoupper($tickerArray[$ii]))==0){ 
             $matchSplit[$ii]=$splitOutput[$i]."@"; 
            } 

           } 
         $i++; 
         } 
         if($matchSplit[$ii]==-1){ 
          echo "[email protected]"; 
         }else{ 
          echo $matchSplit[$ii]; 
         } 
       } 


       //echo ($output); 


         curl_close($ch); 


       ?> 
+0

你做了什么调试?资源是否允许第三方(即您)下载?他们是否阻止cURL之类的请求? – 2012-02-16 02:03:31

+0

这工作了一年多。我将如何进一步调试,以检查输出? – 2012-02-16 02:06:11

+1

您可以尝试设置用户代理,以便请求看起来像来自浏览器。他们可能试图阻止“非浏览器”的用户代理。 – F21 2012-02-16 02:11:54

回答

1

我添加了一个用户代理脚本,它似乎罚款这里工作:

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "http://www.batstrading.com/market_data/symbol_data/csv/"); 
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'; 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); //time out of 15 seconds 
$output = curl_exec($ch); 
curl_close($ch); 

//Then your output paring code 

输出我得到:

HYG~FBT~ 

OUTPUT TEST: Name,Volume,Ask Size,Ask Price,Bid Size,Bid Price,Last Price,Shares Matched,Shares Routed SPY,35641091,0,0.0,0,0.0,134.38,34256509,1384582 BAC,22100508,0,0.0,0,0.0,7.78,20407265,1693243 QQQ,12085707,0,0.0,0,0.0,62.65,11703725,381982 XLF,11642347,0,0.0,0,0.0,14.47,11429581,212766 VXX,9838310,0,0.0,0,0.0,28.2,9525266,313044 EEM,9711498,0,0.0,0,0.0,43.28,9240820,470678 IWM,8272528,0,0.0,0,0.0,81.19,7930349,342179 AAPL,6145951,0,0.0,0,0.0,498.24,4792854,1353097 

这也是很好的做法是关闭一旦完成,CURL连接。我相信这也可能在你的问题中发挥作用。

如果你仍然得到问题,请检查脚本运行在服务器可以访问该网站。

更新

经进一步调查,这就是我认为这是问题的根源。

问题在于CSV文件的提供者。也许由于一些问题,CSV会生成,但只包含标题。有些地方确实有数据。

数据仅在一天中的特定时段内可用。

在任何情况下,获取空文件=解析器将打印@notFound,导致我们认为CURL存在问题。

所以我的建议是在脚本中增加一些检查来检查CSV文件是否实际上包含任何数据,而不是只包含标题的文件。

最后,为CURL设置超时值应该解决它,因为提供者需要一段时间才能生成CSV。

+0

我可以查看这个代理信息吗? – 2012-02-16 02:24:53

+0

http://www.user-agents.org/ – esqew 2012-02-16 02:26:05

+0

你应该能够让你使用这个访问PHP页面浏览器的用户代理字符串:'$ _ SERVER [“HTTP_USER_AGENT”];'或在这里一个广泛的名单:http://www.zytrax.com/tech/web/browser_ids.htm – F21 2012-02-16 02:26:28

相关问题