请教:如何利用现成网站编写能够发送短消息的软件?(150分)

  • 主题发起人 主题发起人 base1
  • 开始时间 开始时间
B

base1

Unregistered / Unconfirmed
GUEST, unregistred user!
现在很多网站都可以发送手机短消息,很想知道怎样才能编程序使得不用
使用浏览器上网也能发送短消息?
个人感觉似乎得先截获在网页上点确认时发送出去的数据报,分析之后再
编写一个能够发送同样消息结构的东东,但我不知道具体应该怎样进行.
各位大虾有何良策?
 
我也想知道
 
:(
有哪位比较熟悉网络的大虾快出手吧
分不够还可以再加的...
 
用post试试,知道固定的网页就好办了。
 
不知道这个能不能帮你

(转载)
---------------------------------------------------
很多人一定用过OICQ,想必也用过了它的BP机短讯、手机短讯,编程的朋友一定想实现
这种功能,
如果你的程序能发到手机、发到BP机一定很酷。
现在我就介绍一种可行的方法。
一、原理
它不同于OICQ的双方都在网上才能进行交流的寻呼功能,它可以将文字
信息发送到真正的寻呼机上。只要你能够上网,就可以自己动手,随时随地将信息发送出去
,即使你在国外,也可以利用它来向国内的友人发送信息了,而且不用交纳国际长途费用,
是不是方便又省事呢!
二、分析
现在网上各寻呼台都有网上服务,网页寻呼(Web Paging)就是常用的一种。
它是通过在互联网上访问寻呼台的主页,然后由寻呼台的信息寻呼系统打传呼。所以我们
只要利用HTTP协议就可以实现网络寻呼了。以下就简单介绍一下HTTP协议:
HTTP中完成一个会话通常要完成:1)客户端程序与服务器建立连接2)发送请求3)服务器
响应客户端4)关闭连接
HTTP常用到的请求有:1)GET(请求一万维网页) 2)HEAD(读取一万维网页的头部)
3)PUT(请求一存储万维网页) 4)POST(附加一个命名的资源) 5)DELETE(删除万维网页)
6)LINK(连接两个已有的资源) 7)UNLINK(断开两个已有资源的连接)
HTTP中常用到的应答状态代码有:(*号代表0-9间的一个数) 1. 1** (信息)
2. 2**(成功) 3.4**(客户端错误) 4.5**(服务器错误)
其实我们要实现的程序,只用POST、GET请求,收到正常应答就可以了。POST可以用于
把用户输入的数据以数据流的方式传给CGI程序,CGI通过Contect-Length环境变量来取相应
长度的数据流信息。
POST请求格式如下:
POST http://www2.scuta.edu.cn/stu/chatroom/check.asp HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer: http://www2.scuta.edu.cn/stu/
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
Host: www2.scuta.edu.cn
Content-Length: 87
Pragma: no-cache
Cookie: ASPSESSIONIDQGGGQHHE=ABGNNOJCIGOFCDLBIOLHKAFK
服务器正常应答的头部结构为:
200 OK HTTP/1.0 说明提交数据成功
三、程序的实现
Delphi中NMHTTP已经可以很容易的实现上面的所说的数据提交,而且它还支
持Proxy、这样对于通过代理服务器上网一样可以适用,并且它不是OICQ中发送讯信所用
到SOCKET5代理。
新建一个窗体,加入组件一个ComboBox,命名为callto,用于存放寻呼对象,如国信寻
呼就有95908、94908、94909、98062、98063、98019、98035、98052、98038、99055、
98060、98061、98051、98003、99062、99016、99017、99018、99019、99046、99076;
加入组件Edit,命名为tonumber,表示寻呼号码;加入组件RadioGroup,命名为
RadioGroup1,Caption设为呼机类型,items中加入两项,分别为中文机、数字机;
加入组件Edit,命名为firstName,用于表示发寻呼人的姓;加入组件RadioGroup,
命名为RadioGroup2,Caption设为寻呼人性别,items中加入两项,分别为先生、小姐;
加入组件Memo,命名为callmsg,用于输入发送的信息(注:对于数字机只能是数字信息);
加入组件NMHTTP,命名为NMHTTP1;加入Checkbox,命名为ifuseproxy,用于确定是否使用
代理服务器;加入两个Edit组件,分别用于软件代理服务器地址、代理服务器端口;最后
加入命令按钮,Caption设为“发送”。
现在以国信寻呼为例,它用GET请求就可以实现了,“发送”按钮的程序代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var callstr:string;
begin callstr:='http://tips.gxspace.com/cgi-bin/tips/webpaging?stn_id='+callto.Text+'&page_no='+tonumber.Text;
case RadioGroup1.ItemIndex of
0:callstr:=callstr+'&pager_type=C';
1:callstr:=callstr+'&pager_type=N';
end;
callstr:=callstr+'&firstname='+firstname.text;
case RadioGroup2.ItemIndex of
0:callstr:=callstr+'&title=0';
1:callstr:=callstr+'&title=1';
end;
callstr:=callstr+'&msg='+callmsg.Text+'&answer=null&B1=发送寻呼';
NMHTTP1.InputFileMode := FALSE;
NMHTTP1.OutputFileMode := FALSE;
NMHTTP1.ReportLevel := Status_Basic;
If ifuseproxy.Checked then
Begin
NMHTTP1.Proxy := Edit1.Text;
NMHTTP1.ProxyPort := StrToInt(Edit2.Text);
End;
NMHTTP1.Get(callstr);
end;
有些寻呼(如润迅寻呼就不能用上面的GET请求实现,它要用POST请求),使用与上面相差
不大,如下面是NMHTTP的POST用法:
NMHTTP1.InputFileMode:=False;
NMHTTP1.OutputFileMode:=True;
NMHTTP1.ReportLevel:=Status_Basic;
If ifuseproxy.Checked then
Begin
NMHTTP1.Proxy := Edit1.Text;
NMHTTP1.ProxyPort := StrToInt(Edit2.Text);
End;
With NMHTTP1.HeaderInfo do
Begin
Cookie := Edit5.Text;
LocalMailAddress := Edit6.Text;
LocalProgram := Edit7.Text;
Referer := Edit8.Text;
UserID := Edit9.Text;
Password := Edit10.Text;
End;
// 把要提交的数据先放在test.txt文件中:格式为stnid=A&pageno=123456...
NMHTTP1.Post('http://www.wocall.com/script/zbwebcall.asp','test.txt');
//NMHTTP的具体用法在Delphi安装目前/Borland/Delphi5/Demos/FastNet/Http下有个
NMHTTP使用的例子。
以上都是用NMHTTP实现的,其实用Delphi中的WebBrowser组件同样可以完成数据的提交,
使用是这样的 Webbrowser1.OleObject.Document.FrontPage_Form1.submit();
说明:WebBrowser1是WebBrowser组件的名,Frontpage_Form1是用WebBrowser打开的网页
中的表单名
网页中的表单是这机样的:
<FORM name=FrontPage_Form1 action=http://message.com.cn/cgi-bin/ips/webpaging method=post>
......
</Form>
这样的实现方法就是用程序生成一个已经按用户输入信息生成一个网页,然后通过
WebBrowser1.Navigate(生成的网页),最后提交到服务器Webbrowser1.OleObject.Document.FrontPage_Form1.submit();
这样就完成了一次寻呼



 
to dundayboys:
为什么知道网页就好办了呢?
比如说sohu的或者sina的,但我并不知道在发送的时候究竟产生了什么样的数据报呀
to fu_xiang_yu:
谢谢你的资料,我去试试看,但不一定会成功,因为我的机器在防火墙里边,是通过代理
上网的,所以...
 
o,这样啊
试试吧
 
sina,sohu,网易等ICP是和中国移动合作的,(好像是叫‘移动梦网’)
 
to zyy04:
你所说的我大概也知道,所有的能发送短消息的网站都是与各家电信公司或电信局有联系的
但是我所做的只是让那个网站误认为我这时候正在那个网页上发送短消息,所以我觉得我的
想法应该是不借助于任何电信公司而可行的..
 
>>fu_xiao_yu:
唉,没有成功呀

各位大虾还有什么好的提议吗?
 
没试过所以不知道了
 
我写了一个“手机短消息炸弹”,其实就是往网页上按一定的格式发请求。
我用的格式是:'http://sms.szunicom.com/cgi-bin/tims/webgsm?gsm_no=*******
&mobile_type=C&firstname=******&title=0&message=*******',这个可以给联通的
用户发短消息,我是在广东地区,不知道其它地区是否有效。
程序可在Http://delphis.yeah.net上下载。
 
教父,你那个玩意儿以前不是不提供源码的吗
 
还是没马啊
 
呵呵,我没放上去。
没什么技术含量的,我把格式都告诉你了,你稍微试一下就可以做出来了的。 :)
 
>>教父:
你的想法和我不谋而和了,呵呵
我也是先随便找个免费短消息的网址,然后就往出发消息
前两天用NETXRAY拦截了我点提交时机器发出的数据报,
报文到是很快就解析出来了,但由于我的机器在防火墙
里面,所以即使我用程序把数据包一样的发出来,也被网
关拦截了:( (关键是我不懂代理的原理),于是我就也想到
干脆直接向网址发网址得了,还可以调用IE的代理,呵~,正在
试验中,希望能很快出个结果:P
 
>>教父:
还想问一句,如果采用直接发送网址的方式话,如何得到返回的结果呢?
总不能一按下按钮就说"发送成功"吧?
 
两位就先讨论吧

我有时间时试着照教父的原理做一个,看看能不能把自己毙了
 
谢谢教夫,我的程序已经编出来了
支持中国电信的所有手机
你说的那个网站目前好象有点问题?不能发送
就酱紫,结帐
 
后退
顶部