0

我在 PHP 中使用 cURL 登录到我的远程服务器。我已成功登录远程 URL,但似乎无法显示该页面的内容。到目前为止,这是我的代码:

<?php

$username = 'Blah';
$password = 'BlahBlah';

$ch = curl_init();
$postdata="email=$username&password=$password";
curl_setopt ($ch, CURLOPT_URL,"http://www.example.com/login.php");
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_HEADER, true);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt ($ch, CURLOPT_REFERER, "http://www.example.com/login.php");
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, "http://www.example.com/User/Home.php") ;
$result2 = curl_exec($ch) ;

echo $result2 ;

curl_close($ch);

?>

当我尝试 echo$result2时,什么都没有。屏幕上没有打印任何内容。我需要做什么才能将内容打印到屏幕上?

这是 HTTP 标头输出:

HTTP/1.1 302 Moved Temporarily Date: Sun, 26 May 2013 23:46:40 GMT Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: current_page=Home.php; expires=Wed, 24-May-2023 23:46:40 GMT Location: http://www.example.com/?redirected=3 Vary: Accept-Encoding,User-Agent Content-Length: 0 Content-Type: text/html HTTP/1.1 200 OK Date: Sun, 26 May 2013 23:46:40 GMT Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding,User-Agent Transfer-Encoding: chunked Content-Type: text/html
4

2 回答 2

0

它可能没有遵循重定向。利用:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
于 2013-05-26T23:46:16.340 回答
0

PHP中有许多类型的值在echo'ed时不产生输出。在我的脑海中,这包括bool(false), NULL, 和""(emptystring)。可能还有更多。为了查看它们之间的区别,请使用var_dump来区分它们。$result2 可能是空字符串或 bool(false),使用 echo 无法判断是哪一个。但是,鉴于 http 标头包含Content-Length: 0,它几乎可以肯定是空字符串。另外,$username 和 $password 没有 urlencoded,所以如果它们包含任何具有特殊含义的字符application/x-www-urlencoded-format,服务器将收到错误的用户名/密码。这包括空格、&=?和其他几个。它们需要进行 url 编码,例如$postdata='email='.urlencode($username).'&password='.urlencode($password);,还有一点,调试curl代码的时候,开启CURLOPT_VERBOSE,会打印很多有用的调试信息。

但是@Marshall House 是正确的,服务器发送了一个HTTP/1.1 302 Moved Temporarilyurl 重定向,它希望你遵循它......而你没有。您可以使用 CURLOPT_FOLLOWLOCATION 告诉 curl 自动遵循 http 重定向。

于 2017-07-25T11:50:57.197 回答