加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Curl返回空字符串

发布时间:2020-12-13 15:55:48 所属栏目:PHP教程 来源:网络整理
导读:我有一个相当奇怪的问题.我可以访问网站(电子邮件和密码).抱歉,我无法向您显示此网站.我需要从它的内容中获取一些信息. 而不是我会告诉你我的代码. //I form string of post request$fields=array( 'name_of_login_field' = urlencode('test@gmail.com'),'na
我有一个相当奇怪的问题.我可以访问网站(电子邮件和密码).抱歉,我无法向您显示此网站.我需要从它的内容中获取一些信息.
而不是我会告诉你我的代码.

//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,我会收到空??字符串.怎么可能.我提出建议.可能有人见过类似的东西吗?
UPDATE
这是我的新鲜卷曲:

if( $curl = curl_init() ) 
{
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION,like gecko) version/7.0 mobile/11b554a safari/9537.53"); 

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

随着卷曲$out是错误的.如果我用CURLOPT_FOLLOWLOCATION删除字符串$out是空字符串.
UPDATE1
我检查了

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)
UPDATE3
我做这些事来设置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的var_dump和响应的标题. PHPSESSID与那里不同.我应该这样做,@ baf在评论中以其他方式说过什么?
(您必须打开表单页面,存储cookie,然后使用cookie再次发布)

解决方法

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

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

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

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

unlink($jar); // delete temporary file

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读