找不到PHP cURL URL

时间:2015-10-11 19:14:48

标签: php curl

我是新手使用cURL ....每当我运行这个时,我会得到一个页面,上面写着"在这台服务器上找不到请求的URL / files /。"但是,如果我转到浏览器上的链接,它就会显示出来。请协助。我看过类似的问题,但找不到解决问题的方法。

<?php
$username="user"; 
$password="pass"; 
$url="http://website.com/login/"; 
$cookie="cookie.txt"; 

$postdata = "login=$username&pass=$password";


//set the directory for the cookie using defined document root var
$dir = DOC_ROOT;

//the info per user with custom func. 
$path = $dir;

//login form action url 

$cookie_file_path = $path."/cookie.txt";

$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
//set the cookie the site has for certain features, this is optional
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0");
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_exec($ch);

//page with the content I want to grab
curl_setopt($ch, CURLOPT_URL, "http://website.com/files/");
//do stuff with the info with DomDocument() etc
$html = curl_exec($ch);
echo $html;
curl_close($ch);

?>

3 个答案:

答案 0 :(得分:0)

$postdata = array(
  'login' => $username,
  'pass' => $password
);

curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

答案 1 :(得分:0)

更改

curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);

curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);

确保您在当前目录上写入权限,以便curl可以创建Cookie文件cookie.txt

你最终会得到类似的东西:

<?php
$username="user"; 
$password="pass"; 
$url_login="http://website.com/login/"; 
$url_files="http://website.com/files/"; 
$cookie="cookie.txt"; 

$postdata = "login=$username&pass=$password";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_login);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, $url_files);
$html = curl_exec($ch);
echo $html;
curl_close($ch);
?>

注意:

有时,少即是多。

答案 2 :(得分:0)

您提供的网址http://website.com/files/具有重定向功能,因此CURL必须启用选项才能跟踪重定向。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

在您的代码中,您有

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

0表示false,因此您在HTTP 30x上禁用了关注