如何使用CURL获取HTTPS的正文内容

时间:2009-08-01 06:34:27

标签: php curl https

以下代码将检索在PHP中使用CURL而不是https检索的网址的正文内容。任何人都可以告诉我如何编辑代码,因为我需要返回的数据不仅仅是标题。

从我在这里做的测试是结果。你可以看到它有内容长度,我只是不知道如何访问它。

由于 斯蒂芬

错误:0

string(1457)“HTTP / 1.1 200 OK日期:星期六,2009年8月1日06:32:11 GMT服务器:Apache / 1.3.41(达尔文)PHP / 5.2.4 mod_ssl / 2.8.31 OpenSSL / 0.9。 7l Cache-Control:max-age = 60 Expires:Sat,01 Aug 2009 06:33:11 GMT Last-Modified:Thu,23 Nov 2006 17:44:53 GMT ETag:“97d620-44b-4565de15”Accept-Ranges :bytes Content-Length:1099 Connection:close Content-Type:text / html“

<?php

$curl_handle=curl_init();

$username = "";
$password = "";

$fullurl = "http://www.queensberry.com";
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_HEADER, 1);
   curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
   curl_setopt($ch, CURLOPT_FAILONERROR, 0);
   curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
   curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
   curl_setopt($ch, CURLOPT_URL, $fullurl);

   $returned = curl_exec($ch);

   curl_close ($ch);
   var_dump($returned);


?>

4 个答案:

答案 0 :(得分:8)

以下是解决方案: 试试这个,只需保持其他编码与上面相同......

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
// curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_URL, $fullurl);

$returned = curl_exec($ch);

curl_close ($ch);
var_dump($returned);

将CURLOPT_HEADER更改为0会使其仅返回页面内容。

答案 1 :(得分:2)

$fullurl不应该是“https://www.queensberry.com”吗?

当我按照规定更改$fullurl并运行代码时,var_dump显示了“正在建设中”页面。

答案 2 :(得分:2)

如果您仍然需要标题,这意味着将CURLOPT_HEADER设置为0不是一个选项,您可以通过查找空行(两个CRLF)找到正文的开头。请参阅规范:http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html

所以这应该做的工作:

    $data = curl_exec($ch);
    $start = strpos($data, "\r\n\r\n") + 4;
    $body = substr($data, $start, strlen($data) - $start);

答案 3 :(得分:1)

我使用curl的getinfo查找标题的长度。然后对响应进行子串:

NULL