gpt4 book ai didi

php - 似乎无法通过 cURL 获取网页内容 - 用户代理和 HTTP header 都已设置?

转载 作者:可可西里 更新时间:2023-11-01 00:50:26 25 4
gpt4 key购买 nike

出于某种原因,我似乎无法通过 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 header 中 file_get_contents and CURL can't open a specific website - 在函数 curl_get() 包含当前的所有选项之前,除了 CURLOPT_USERAGENTCURLOPT_HTTPHEADERS`。

网站是否有可能完全阻止通过 cURL 或其他远程文件打开机制的请求,无论提供了多少数据来尝试发出真正的浏览器请求?

此外,是否有可能诊断出为什么我的请求没有出现?

任何帮助回答上述两个问题,或编辑/提出建议以获取文件内容的任何帮助,即使通过不同于 cURL 的方法,我们也将不胜感激 ;)。

最佳答案

尝试添加:

CURLOPT_FOLLOWLOCATION => TRUE

根据您的选择。

如果您从命令行运行一个简单的 curl 请求(包括 -i 以查看响应 header ),那么很容易看到:

$ 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 header 的 302。如果您直接点击该位置,您将获得您正在寻找的内容。

然后回答你的两个问题:

  1. 不,不可能阻止来自诸如 curl 之类的请求。如果消费者可以使用 HTTP,那么它就可以访问浏览器可以访问的任何内容。
  2. 使用 HTTP 代理进行诊断可能对您有所帮助。 Wireshark、fiddler、charles 等。将来应该可以帮助你。或者,像我一样从命令行发出请求。

编辑
啊,我明白你现在在说什么了。因此,当您第一次访问该链接时,您会被重定向并设置一个(或多个)cookie。一旦您拥有这些 cookie,您的请求就会按预期通过。

因此,您需要使用 cookiejar,如本例所示:http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html

因此,您需要发出初始请求,保存 cookie,然后再发出包含 cookie 的后续请求。

关于php - 似乎无法通过 cURL 获取网页内容 - 用户代理和 HTTP header 都已设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com