我正在尝试开发一个基于PHP的应用程序,将跨越印度的短信发送给从数据库中挑选的联系人。搜索了几个小时后,我发现以下工作(我测试过)脚本使用fullonsms.com
作为sms网关,但它一次发送一条消息,然后加载主页。
但我不太了解卷曲。
所以
这是我的代码:
<?php
$cookie_file_path = "/cookie.txt";
$username="username";
$password="password";
$tomobno="1234567890";
$message=urlencode("Hi buddy");
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://sms.fullonsms.com/login.php");
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_fie_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, "MobileNoLogin=$username&LoginPassword=$password&x=16&y=14");
$html=curl_exec($ch);
**curl_setopt($ch, CURLOPT_URL,"http://sms.fullonsms.com/home.php");**
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_fie_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, "ActionScript=%2Fhome.php&CancelScript=%2Fhome.php&HtmlTemplate=%2Fvar%2Fwww%2Fhtml%2Ffullonsms%2FStaticSpamWarning.html&MessageLength=140&MobileNos=$tomobno&Message=$message&Gender=0&FriendName=Your+Friend+Name&ETemplatesId=&TabValue=contacts");
$html = curl_exec($ch);
echo $html;
?>
有一个类似的问题,但接受的答案不在主题上,而是使用不同的网关SMS sending through free gateway
答案 0 :(得分:4)
1)我需要帮助来了解实际做了什么。
代码正在向服务发送两个HTTP请求。第一个请求使用您的用户名和密码登录,并存储下一个请求的会话cookie。第二个请求是实际触发发送的请求,它将移动号码和其他详细信息作为POST数据。由于cookiejar,第二个请求能够使用第一个请求创建的会话。
2)其次,如何修改它以最佳方式将短信发送给多个人
如果该服务允许您输入多个手机号码(例如以逗号分隔),那么这将是最优的,因为它只需要将两个请求发送到所有手机号码。
如果没有,您将必须循环第二个请求,以便每个手机号码有一个请求。请记住更改硬编码的POST数据,以便使用下一个手机号码和名称,而不是每次都发送相同的号码。
我还建议在每次循环迭代后暂停一段时间,以防止发送请求太快。例如,您可以使用sleep(1)
等待1秒钟。
答案 1 :(得分:0)
1)我发现cURL options列表非常有用,还有google'HTTP headers'和'RESTful URL'。
2)您可以将代码包装在几个函数中,即确定是否只有一个或多个收件人(可能使用is_array()
)的函数,然后是一个具有{{1}等参数的函数它使用$message, $recipients, $from, etc..
循环通过第一个函数传递给它的接收者