PHP cURL没有错误但无法正常工作

时间:2014-03-11 17:12:51

标签: php curl

我现在已经对这个问题感到头疼了一段时间,我感到厌倦了。我不是一个PHP程序员,所以我可能会遗漏一些对我的Python注入大脑并不是很明显的东西。

所以这里是上下文。我需要编写一个脚本来自动登录到Web界面并运行搜索,而且,我所尝试做的所有事情似乎都失败了。

这是我的代码:

<?php
echo 'start';
// INIT CURL
$ch = curl_init();

// SET URL FOR THE POST FORM LOGIN
curl_setopt($ch, CURLOPT_URL, 'https://W0110DcIpsOcsRpt02/si_ocs_gui/login.php');

// ENABLE HTTP POST
curl_setopt ($ch, CURLOPT_POST, 1);

// SET POST PARAMETERS : FORM VALUES FOR EACH FIELD

curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username=*****&password=*****&btnSubmit=Login');

// IMITATE CLASSIC BROWSER'S BEHAVIOUR : HANDLE COOKIES
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/var/tmp/cookie.txt');

# Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
# not to print out the results of its query.
# Instead, it will return the results as a string return value
# from curl_exec() instead of the usual true/false.
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_FRESH_CONNECT, 1);

// EXECUTE 1st REQUEST (FORM LOGIN)
$store = curl_exec ($ch);

if($store == False){
        echo " store false ";
        echo curl_error($ch);
} else {
        echo " store true ";
        echo $store;
}

// SET FILE TO DOWNLOAD
echo ' second_request ';
curl_setopt($ch, CURLOPT_URL, 'https://W0110DcIpsOcsRpt02/si_ocs_gui/FWOCS1_BL_SUBSCRIBERS_list.php');
curl_setopt ($ch, CURLOPT_POST, 1);
#curl_setopt ($ch, CURLOPT_POSTFIELDS, 'value_ACCESS_NO_4=15142351150');
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'q=\(SUBSCRIBER_ID~equals~1545303\)');
// EXECUTE 2nd REQUEST (FILE DOWNLOAD)
if(!$store == False){
        $content = curl_exec ($ch);
        echo $content;
}
// CLOSE CURL

curl_close($ch);

echo ' done';
?>

这种行为如下。我运行脚本,它在第一个cURL请求(登录)失败并且不返回任何错误。我在这里修改了这一行:

curl_setopt ($ch, CURLOPT_POSTFIELDS, 'username=*****&password=*****&btnSubmit=Login');

删除btnSubmit=Login部分,我会显示登录页面,其中填写了用户名和密码字段。我可以按下登录按钮,它会起作用。然而,似乎我缺乏网络开发在这里咬我,我不知道该按钮是如何工作的。所以,这里是用firebug检查的代码:

<a class="rnr-button main" href="#" onclick="document.forms[0].submit();return false;">Submit</a>

我也直接在Web服务器上的PHP代码中找到了与之对应的按钮:

if ((@$_POST["btnSubmit"] == "Login" || $adSubmit) && $logacc)

为什么我在尝试btnSubmit=Login

所以我的问题非常简单:我做错了什么,如何才能得到我需要的结果?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并找到了解决方案。

代码

CURLOPT_RETURNTRANSFER =&gt;假的

使用它来解决您的问题。