Php Can';我好像找不到网页';用户代理和HTTP头都设置了吗?

Php Can';我好像找不到网页';用户代理和HTTP头都设置了吗?,php,http,curl,Php,Http,Curl,由于某些原因,我似乎无法通过cURL获取此特定网页的内容。我已经成功地使用了cURL来很好地访问“顶级页面”内容,但是相同的自建快速cURL函数似乎不适用于其中一个链接的子web页面 顶级页面:http://www.deindeal.ch/ 子页面:http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/ mycurl函数(在functions.php中) PHP文件以获取内容(使用echo进行测试) 到目前为止,我已经尝试了以下方法

由于某些原因,我似乎无法通过cURL获取此特定网页的内容。我已经成功地使用了cURL来很好地访问“顶级页面”内容,但是相同的自建快速cURL函数似乎不适用于其中一个链接的子web页面

顶级页面:
http://www.deindeal.ch/

子页面:
http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/

mycurl函数(在functions.php中)

PHP文件以获取内容(使用echo进行测试)

到目前为止,我已经尝试了以下方法来实现这一点

  • 在本地(XAMPP)和远程(LAMP)运行文件
  • 在此处推荐的用户代理和HTTP头中添加-在函数
    curl\u get()
    之前,包含所有当前选项,除了CURLOPT\u USERAGENT
    CURLOPT\u 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
如您所见,它返回一个302和一个Location头。如果你直接点击那个位置,你就会得到你想要的内容

回答你的两个问题:

  • 不,阻止像curl这样的请求是不可能的。如果消费者可以使用HTTP,那么它可以访问浏览器可以访问的任何内容
  • 使用HTTP代理进行诊断可能会对您有所帮助。Wireshark、fiddler、charles等应该会在未来帮助你。或者,像我那样从命令行发出请求
  • 编辑
    啊,我明白你在说什么了。因此,当您第一次转到该链接时,您将被重定向并设置一个或多个cookie。一旦你有了这些cookie,你的请求就会按预期的那样通过

    因此,您需要使用cookiejar,如本例所示:


    因此,您需要发出初始请求,保存cookies,然后发出后续请求,包括cookies。

    感谢您提供的信息,并根据响应标题添加
    CURLOPT\u FOLLOWLOCATION
    确实有效(重定向到
    http://www.deindeal.ch/welcome/?..
    ),但是,现在很明显,响应头显示的位置与您尝试在浏览器中访问url时显示的位置不同。如果我在浏览器中访问url,我发现自己没有被重定向——url被完美地请求,但是当发出cURL请求时,会提供一个不同的位置——你知道为什么会这样吗?
    CURLOPT_FOLLOWLOCATION => TRUE
    
    $ 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