我现在已经对这个问题感到头疼了一段时间,我感到厌倦了。我不是一个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
。
所以我的问题非常简单:我做错了什么,如何才能得到我需要的结果?
答案 0 :(得分:0)
我遇到了同样的问题并找到了解决方案。
代码
CURLOPT_RETURNTRANSFER =&gt;假的
使用它来解决您的问题。