Php (二);投稿
为了学习PHP,我的老板让我做一些项目。到目前为止,我已经完成了一个待办事项列表和提醒(www.frontpagewebdesign.com/newfolder),但我现在要做的是发送短信通知 因为我买不起这么小的项目的短信网关,所以我决定使用我在这个网站上的账户:www.SMS-returne.ro。我的问题是自动登录和短信发送与卷曲 我遵循了一个教程,到目前为止我做了以下工作:Php (二);投稿,php,post,curl,login,Php,Post,Curl,Login,为了学习PHP,我的老板让我做一些项目。到目前为止,我已经完成了一个待办事项列表和提醒(www.frontpagewebdesign.com/newfolder),但我现在要做的是发送短信通知 因为我买不起这么小的项目的短信网关,所以我决定使用我在这个网站上的账户:www.SMS-returne.ro。我的问题是自动登录和短信发送与卷曲 我遵循了一个教程,到目前为止我做了以下工作: <?php $form_vars = array(); //array for SMS sending f
<?php
$form_vars = array();
//array for SMS sending form values
$username = '****@****.com';
$password = '********';
$loginUrl = 'http://sms-gratuite.ro/page/autentificare';
$postUrl='http://sms-gratuite.ro/page/acasa';
$form_vars['to'] = "076xxxxxxx";
//my own phone number
$form_vars['mesaj'] = "test";
//SMS text
$encoded_form_vars = http_build_query($form_vars);
$user_agent="Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
//init curl
$ch = curl_init();
//Set the URL to work with
curl_setopt($ch, CURLOPT_URL, $loginUrl);
// ENABLE HTTP POST
curl_setopt($ch, CURLOPT_POST, 1);
//Set the post parameters (mail and parola are the IDs of the form input fields)
curl_setopt($ch, CURLOPT_POSTFIELDS, 'mail='.$username.'&parola='.$password);
//Handle cookies for the login
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
//execute the request (the login)
$store = curl_exec($ch);
//check if the Login was succcesful by finding a string on the resulting page
if(strpos($store, "Trimite mesaj")===FALSE)
echo "logged in";
else
echo "not logged";
//set the landing url
curl_setopt($ch, CURLOPT_URL, 'http://sms-gratuite.ro/page/autentificare');
$referer='';
curl_setopt($ch, CURLOPT_URL, $postUrl);
//curl_setopt($ch, CURLOPT_HTTPHEADER,array("Expect:"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'to='.$form_vars['to'].'&mesaj='.$form_vars['mesaj']);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
$result = curl_exec($ch);
if(strpos($result, "Mesajul a fost trimis")===FALSE)
echo "<br>sms sent";
else
echo "<br>sms not sent";
curl_close($ch);
?>
我没有任何错误,但它肯定不起作用。首先,登录失败。这是一种特殊的形状,旋度不能处理它吗
请尝试这些步骤,并对您发现的更多错误进行评论,最好是详细的评论。首先,您应该与网站的内容取得联系,并在那里寻求帮助。。。或者获得提供
REST
API的其他服务。。。但对于你的问题,它应该有效。在提交登录请求之前,请确保您拥有网站设置的所有cookie。。。此外,他们可能会检查用户代理变量,您可以尝试仿冒它,例如Mozilla/4.0(兼容;MSIE 5.01;Windows NT 5.0)
谢谢Kamil!做了编辑,我想我成功登录了。至少浏览器是这么说的。使用相同的方法(strpos),我尝试提交第二个表单,但没有得到积极的结果。我无法访问该表单来实际提交SMS/一般来说:确保表单中的所有HTML输入都在CURLOPT_POSTFIELDS
中,包括type=“submit”
如果它具有名称
属性。此外,您还应将第一次调用(登录)中的CURLOPT_COOKIEJAR
作为CURLOPT_COOKIEFILE
传递到第二次调用,以将登录调用中获取的cookie传递到sms调用,以伪造正常访问。此类信息不容易获取。我在脚本中添加了您的建议,并成功登录。很高兴听到您的建议得到了解决…:-)它没有被广泛发布的原因是,服务提供商不喜欢他们的服务以这种方式使用:-)我通过了第一点(登录),现在我被卡在了第二点。我从Firebug获得了一些关于HTTP请求细节的信息,我试图理解它以及curl选项,并认为我涵盖了所有HTTP头。我不知道有这样的插件。我到家后会试试的,我会通知你的。谢谢