php – 似乎无法通过cURL获取网页的内容 – 用户代理和HTTP标头都设置了?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 似乎无法通过cURL获取网页的内容 – 用户代理和HTTP标头都设置了?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2906字,纯文字阅读大概需要5分钟。
内容图文
![php – 似乎无法通过cURL获取网页的内容 – 用户代理和HTTP标头都设置了?](/upload/InfoBanner/zyjiaocheng/720/1b9409cec4864e859b561143f3c615e7.jpg)
出于某种原因,我似乎无法通过cURL获取此特定网页的内容.我已经设法使用cURL来获得“顶级页面”内容,但是相同的自建快速cURL功能似乎不适用于其中一个链接的子网页.
顶级页面:http://www.deindeal.ch/
子页面:http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/
我的cURL函数(在functions.php中)
function curl_get($url) {
$ch = curl_init();
$header = array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Accept-Language: en-us;q=0.8,en;q=0.6'
);
$options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13',
CURLOPT_HTTPHEADER => $header
);
curl_setopt_array($ch, $options);
$return = curl_exec($ch);
curl_close($ch);
return $return;
}
PHP文件获取内容(使用echo进行测试)
require "functions.php";
require "phpQuery.php";
echo curl_get('http://www.deindeal.ch/deals/hotel-walliserhof-zermatt-2-naechte-30/');
到目前为止,我已尝试以下方法来实现此功能
>在本地(XAMPP)和远程(LAMP)保存文件.
>在此处推荐的用户代理和HTTP标头中添加了file_get_contents and CURL can’t open a specific website – 在函数curl_get()包含所有选项作为当前之前,除了CURLOPT_USERAGENT和CURLOPT_HTTPHEADERS`之外.
是否有可能通过cURL或其他远程文件打开机制完全阻止请求,无论提供多少数据来尝试发出真正的浏览器请求?
此外,是否有可能诊断为什么我的请求没有出现?
任何帮助回答上述两个问题,或编辑/提出获取文件内容的建议,即使通过不同于cURL的方法,也将非常感谢;).
解决方法:
尝试添加:
CURLOPT_FOLLOWLOCATION => TRUE
你的选择.
如果从命令行运行一个简单的curl请求(包括-i来查看响应头),那么很容易看到:
$curl -i 'http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/'
HTTP/1.1 302 FOUND
Date: Fri, 30 Dec 2011 02:42:54 GMT
Server: Apache/2.2.16 (Debian)
Vary: Accept-Language,Cookie,Accept-Encoding
Content-Language: de
Set-Cookie: csrftoken=d127d2de73fb3bd72e8986daeca86711; Domain=www.deindeal.ch; Max-Age=31449600; Path=/
Set-Cookie: generic_cookie=1; Path=/
Set-Cookie: sessionid=987b1a11224ecd0e009175470cf7317b; expires=Fri, 27-Jan-2012 02:42:54 GMT; Max-Age=2419200; Path=/
Location: http://www.deindeal.ch/welcome/?deal_slug=hotel-cristal-in-nuernberg-30
Content-Length: 0
Connection: close
Content-Type: text/html; charset=utf-8
如您所见,它返回带有Location标头的302.如果您直接点击该位置,您将获得您要查找的内容.
并回答你的两个问题:
>不,阻止curl之类的请求是不可能的.如果消费者可以谈论HTTP,那么它可以获得浏览器可以访问的任何内容.
>使用HTTP代理进行诊断可能对您有所帮助. Wireshark,小提琴手,查尔斯等人.应该会帮助你将来.或者,像我一样做,并从命令行发出请求.
编辑
啊,我看到你现在在说什么.因此,当您第一次转到该链接时,您将被重定向并设置cookie(或cookie).获得这些cookie后,您的请求将按预期进行.
因此,您需要使用cookiejar,如下例所示:http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html
因此,您需要提出初始请求,保存Cookie,然后在此之后发出包含Cookie的后续请求.
内容总结
以上是互联网集市为您收集整理的php – 似乎无法通过cURL获取网页的内容 – 用户代理和HTTP标头都设置了?全部内容,希望文章能够帮你解决php – 似乎无法通过cURL获取网页的内容 – 用户代理和HTTP标头都设置了?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。