我在PHP中使用file_get_contents
。在下面的代码中,第一个URL工作正常,但第二个不起作用。
$URL = "http://test6473.blogspot.com";
$domain = file_get_contents($URL);
print_r($domain);
$add_url= "http://adfoc.us/1575051";
$add_domain = file_get_contents($add_url);
echo $add_domain;
关于为什么第二个不起作用的任何建议?
答案 0 :(得分:11)
file_get_contents未检索到的URL,因为它们的服务器会检查请求是来自浏览器还是来自任何脚本。如果他们从脚本中找到了请求,他们只会禁用页面内容。
因此我必须提出类似浏览器请求的请求。所以我使用以下代码来获取第二个url内容。对于不同的Web服务器可能会有所不同。因为他们可能会进行不同的检查。
即使你为什么不尝试使用以下代码!如果你很幸运,这对你有用!!
function getUrlContent($url) {
fopen("cookies.txt", "w");
$parts = parse_url($url);
$host = $parts['host'];
$ch = curl_init();
$header = array('GET /1575051 HTTP/1.1',
"Host: {$host}",
'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language:en-US,en;q=0.8',
'Cache-Control:max-age=0',
'Connection:keep-alive',
'Host:adfoc.us',
'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$url = "http://adfoc.us/1575051";
$html = getUrlContent($url);
感谢大家的指导。
答案 1 :(得分:2)
不幸的是,看起来第二个站点阻止了无法识别的浏览器的访问。即使使用命令行中的curl也不起作用:
curl -I http://adfoc.us/1575051
给出:
HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Fri, 28 Jun 2013 12:15:40 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.5.0
Set-Cookie: __cfduid=d7cd1bf18c136a288cc2b36065a3b31f01372421740; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.adfoc.us
CF-RAY: 85a4dc6829e06d0
但没有内容。请注意它返回状态200,因此如果您检查返回的字符串是否为boolean === false以查看它是否失败,它实际上看起来好像它已经有效。
如果您需要欺骗使用者(以及可能的其他内容)尝试让网址接受您的请求,您需要尝试使用curl库并尝试不同的组合以尝试使其工作。首先尝试使用curl命令行进行试验也是减少调查开发时间的好方法。
以前有人经历过此事:
php curl: how can i emulate a get request exactly like a web browser?
答案 2 :(得分:1)
看起来有时第二个网址答案太慢,可能有重定向。 尝试使用curl并设置更大的超时。 另外,转错
error_reporting(-1);
ini_set('display_errors','On');
答案 3 :(得分:0)
您也可以尝试此代码
<?php
function getUrlContent($url) {
$parts = parse_url($url);
$host = $parts['host'];
$ch = curl_init();
$header = array('GET /1575051 HTTP/1.1',
"Host: {$host}",
'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language:en-US,en;q=0.8',
'Cache-Control:max-age=0',
'Connection:keep-alive',
'Host:adfoc.us',
'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$url = "https://news.google.com/rss/search?q=apple&hl=en-IN&gl=IN&ceid=IN:en";
$html = getUrlContent($url);
$xml = simplexml_load_string($html);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
print_r($array);
?>