我继承了一段代码,它使用fetchURL()
下面的函数从 url 中获取数据。我刚刚注意到,feof()
在检索到整页数据之前,它通常会返回 true。我已经尝试了一些测试,并且每次都使用这两种方法CURL
来检索整个页面。file_get_contents()
错误是间歇性的。在 9 次调用中,有时 7 次会成功完成,有时只会成功完成 4 次。9 次调用中的特定 4 次(它们是带有更改查询字符串的获取请求)总是成功完成。我尝试颠倒请求的顺序,相同的 4 个查询字符串仍然总是成功,而其余的有时工作,有时不工作。
因此,“似乎”返回的数据可能与问题有关,但让我感到困惑的是间歇性。在每种情况下返回的数据总是相同的(例如,每次我使用?SearchString=8502806
返回的页面的查询字符串进行调用时都包含相同的数据),但有时整个页面是由传递的fgets/feof
,有时不是。
有没有人对可能导致这种情况的原因提出建议?O 在这个主题上看到的大多数其他帖子都是关于相反的问题,feof()
即没有返回 true。
function fetchURL( $url, $ret = 'body' ) {
$url_parsed = parse_url($url);
$host = $url_parsed["host"];
$port = (isset($url_parsed["port"]))?$url_parsed["port"]:'';
if ($port==0)
$port = 80;
$path = $url_parsed["path"];
if ($url_parsed["query"] != "")
$path .= "?".$url_parsed["query"];
$out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";
$fp = fsockopen($host, $port, $errno, $errstr, 30);
fwrite($fp, $out);
$body = false;
$h = '';
$b = '';
while (!feof($fp)) {
$s = fgets($fp, 1024);
if ( $body )
$b .= $s;
else
$h .= $s;
if ( $s == "\r\n" )
$body = true;
}
fclose($fp);
return ($ret == 'body')?$b:(($ret == 'head')?$h:array($h, $b));
}