php - Curl 返回空字符串

标签 php curl

我有一个很奇怪的问题。我可以访问站点(电子邮件和密码)。抱歉,我无法向您显示此站点。我需要从它的内容中获取一些信息。 相反,我会向您展示我的代码。

//I form string of post request
$fields=array(
    'name_of_login_field' => urlencode('test@gmail.com'),
    'name_of_password_field' => urlencode('pass')
);
foreach($fields as $key=>$value) 
{ 
    $fields_string .= $key.'='.$value.'&'; 
}
$fields_string=rtrim($fields_string, '&');

然后我通过 curl 发送它。

$curlURL="URL";
if( $curl = curl_init() ) 
{
    curl_setopt($curl, CURLOPT_URL, $curlURL);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_HEADER, false);  
    curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($curl, CURLOPT_USERAGENT, "mozilla/5.0 (ipad; cpu os 7_0_4 like mac os x) applewebkit/537.51.1 (khtml, like gecko) version/7.0 mobile/11b554a safari/9537.53"); 

    $out = curl_exec($curl);
    var_dump($out);
    //var_dump($out);
    curl_close($curl);
}

一个站点有一个包含两个输入(登录密码)的表单。它还有一个带有名称的提交按钮和一些带有名称的隐藏输入 - 重定向。 如果我将 google.com 或我们的网站设置为 $curCURL,我会收到其内容的字符串。如果我使用我需要解析的站点的 URL,我会收到空​​字符串。怎么可能。我征求建议。可能有人遇到过类似的事情吗?
更新 这是我的新鲜 curl :

if( $curl = curl_init() ) 
{
    curl_setopt($curl, CURLOPT_URL, $curlURL);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_HEADER, false);  
    curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_USERAGENT, "mozilla/5.0 (ipad; cpu os 7_0_4 like mac os x) applewebkit/537.51.1 (khtml, like gecko) version/7.0 mobile/11b554a safari/9537.53"); 

    $out = curl_exec($curl);
    var_dump($out);
    //var_dump($out);
    curl_close($curl);
}

那个 curl $outfalse。如果我用 CURLOPT_FOLLOWLOCATION 删除字符串 $out 是空字符串。
更新1 我检查了

curl -l desired-site.com

它只返回没有标题的内容。 然后我检查了

curl -s -D - desired-site.com -o /dev/null

它返回了这个标题。

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Thu, 07 May 2015 08:20:23 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/5.4.4-14+deb7u11
Set-Cookie: PHPSESSID=randon_number_of_letters; expires=Sat, 09-May-2015 12:07:03 GMT; path=/
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Cache-Control: no-cache
Pragma: no-cache
Cache-Control: private
Cache-Control: no-store, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Thu, 01 Jan 1970 00:00:01 GMT

它能以某种方式提供帮助吗?
UPDATE2 CURLOPT_VERBOSE 给出相同的结果。但是当我将 CURLOPT_HEADER 设置为 true 时,我可以看到标题(没有跟随位置,它仍然返回 false)
更新 3 我做了这样的事情来设置 cookie:

preg_match('/PHPSESSID=([A-Za-z0-9]+)/',$out, $matches);
$cookie="Cookie: PHPSESSID=".$matches[1];

然后添加到curl:

    curl_setopt($curl1, CURLOPT_COOKIEFILE, $cookie);
    curl_setopt($curl1, CURLOPT_COOKIEJAR, $cookie);

我建立了另一个连接:$curl1=curl_init() 我对 $cookie 和响应 header 进行 var_dump。那里的 PHPSESSID 不同。我应该做什么,@baf 在评论中以其他方式说过什么? (您必须打开表单页面,存储 cookie,然后使用 cookie 再次发布)

最佳答案

这是我在评论讨论中提出的建议。它将 cookie 存储在一个文件中并发出两个请求。只需打开表单页面并将 cookie 保存在 cookie jar 中。第二个请求发布数据。您可能想尝试一下。

$jar = tempnam('/tmp', 'cookie'); // create temporary file

$curl = curl_init($url_1); // open form page
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIEJAR, $jar);
curl_exec($curl);
curl_close($curl);

$curl = curl_init($url_2); // post data
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($curl, CURLOPT_HEADER, false); 
curl_setopt($curl, CURLOPT_COOKIEFILE, $jar);
$out = curl_exec($curl);
curl_close($curl);

unlink($jar); // delete temporary file

关于php - Curl 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30094832/

相关文章:

javascript - 如何使用 javascript 和 PHP 动态触发 onChange 事件

php - 在 While 循环中排序记录

php - 将命令 CURL 转换为 PHP CURL?云火焰 API

php - 带有curl的Cronjob php文件在浏览器中工作但在crontab中工作错误

php - 如何使用 HTTP 管道通过单个 TCP 套接字发送 PHP cURL 句柄?

PHP cURL,提取 XML 响应

PHP Wordpress 画廊

PHP连接MySQL数据库无法连接?

php如何进行部分搜索/输入和下拉菜单搜索?

linux - curl 从第一次尝试开始就不起作用