2

为了学习 PHP,我的老板让我做一些项目。到目前为止,我已经完成了一个待办事项列表和提醒 (www.frontpagewebdesign.com/newfolder),但我现在要做的是发送 SMS 通知。

因为我买不起这么小的项目的短信网关,所以我决定在这个网站上使用我的帐户:www.sms-gratuite.ro。我的麻烦是使用 CURL 自动登录和发送短信。

我遵循了一个教程,这就是我到目前为止所做的:

<?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);

?>

我没有任何错误,但它肯定不起作用。首先登录失败。这种形式是一种特殊的形式吗? curl 不能处理它吗?

4

1 回答 1

1
  1. 您可以将每个 curl 请求结果放入不同的文件中,例如 page1.html、page2.html 等。这样您就可以在浏览器中打开并查看您收到的请求的确切页面是什么
  2. 您需要像浏览器一样发出完全相同的请求。有像 HttpFox(如果您使用的是 FireFox)这样的浏览器插件,可以向您显示所有已发送的字段、所有 cookie 和其他所有相关内容。您可以将该列表与您的卷曲形成的内容进行比较,以找到缺少的部分

尝试这些步骤并评论您遇到的更多错误,最好是详细的。

于 2012-11-20T18:04:19.073 回答