关于http请求的一个奇怪问题(不看你就不知道如何发送。。。)

pipu 2000-09-05 03:35:00
各位高手:
我想写一个小程序用来发送手机短信息。
我的想法是利用现有的手机短信息的web server。
(比如http://mail.135-139.com/gsm_default.htm)
如果我可以获得发送短信息的http请求,就可以用我自己的程序来
发送短消息
我仔细研究了此页的源代码,它就是一个普通的表单提交请求
可是我试着在ie的地址栏中键入如下url
http://mail.135-139.com/cgi-bin/gsm.cgi?sender=testusr&phone_no=testphoneno&content=hello
(其中:testphoneno 为我的手机号码)
但这样做的结果就是它总报500的错误(内部错误)
但我在别的网站(如freemail.263.net)我就可以通过直接提交http请求的方式来完成数据提交,而不是通过页面提交。

各位大虾,请帮我试一下,谢谢各位。
...全文
808 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
maptrix 2000-09-07
  • 打赏
  • 举报
回复
对,我看了一下主页源文件,发现提交的元素名称都是大写,只要用下面的代码就可以成功!
<html>
<body>
<form method=POST action="http://211.103.80.163/cgi-bin/gsm.cgi">
<input name=SENDER value="usr">
<input name=PHONE_NO value="135011111111">
<input name=CONTENT value="test">
<input type=submit value="go">
</form>
</body>
</html>
Kevin_qing 2000-09-07
  • 打赏
  • 举报
回复
to matrix & pipu:
请注意参数的大小写
应该是
SENDER
PHONE_NO
CONTENT
你们两都写錯了
maptrix 2000-09-07
  • 打赏
  • 举报
回复
你现在通信的程序已经没有问题了,现在就是和服务器的接口是不是正确还很难说,我写了下面的代码,在IE里经过提交后,返回“手机短消息发送失败!”的消息。所以你看看你和服务器的接口是正确吗?是只需要提交sender、phone_no、content就可以完成了吗?你可以再仔细看看原来叶面的的代码是怎么写的,然后改写下面的代码进行实验,祝你早日成功!

<html>
<body>
<form method=POST action="http://211.103.80.163/cgi-bin/gsm.cgi">
<input name=sender value="usr">
<input name=phone_no value="13501111111"> #号码用的是我的号码,这个是随便的号码
<input name=content value="test">
<input type=submit value="go">
</form>
</body>
</html>
pipu 2000-09-06
  • 打赏
  • 举报
回复
我试着写了一个程序来完成此功能,发送post请求成功(server:211.103.80.163 port:80)
将如下内容送入socket sendbuf
POST /cgi-bin/gsm.cgi HTTP/1.0
Accept:image/gif,image/x-xbitamp,image/jpeg,image/pjpeg,*/*
Referer:http://mail.135-139.com/gsm_default.htm
Accept-Language:en-us,zh-cn;q=0.8,zh-tw;q=0.5,zh-hk;q=0.3
Content-Type:application/x-www-form-urlencoded
User-Agent:Mozilla/4.0 (compatible;MSIE 5.01;Window NT 5.0)
Host:211.103.80.163
Content-Length:44

sender=usr&phone_no=myphoneno&content=test

(myphoneno is my phone no)
成功接收如下信息。
HTTP/1.1 200 OK
Server: Netscape-Enterprise/3.6
Date: Wed, 06 Sep 2000 04:48:16 GMT
Content-type: text/html
但我的手机还是收不到任何信息

各位请再帮我找一找原因,稍后给分,谢谢。
playpcgame 2000-09-05
  • 打赏
  • 举报
回复
关注
maptrix 2000-09-05
  • 打赏
  • 举报
回复
对了,要使用上面的函数,还需要定义一个全局变量
char *Server="mail.135-139.com";//服务器的地址
maptrix 2000-09-05
  • 打赏
  • 举报
回复
Kevin_qing是正确的,如果你请求一个GET,只需要将参数Resource设为
"cgi-bin/gsm.cgi?sender=testusr&phone_no=testphoneno&content=hello"
调用HTTPGet函数,
若请求一个POST,需将参数Resource设为
"cgi-bin/gsm.cgi"
将参数PostInfo设为
"sender=testusr&phone_no=testphoneno&content=hello"
调用HTTPPost函数
Kevin_qing 2000-09-05
  • 打赏
  • 举报
回复
用ASP写的好象是GET 和 POST 都可以用。
下面是GET /POST的函数
SOCKET HTTPOpen(LPCSTR Server,unsigned short port)
{
struct sockaddr_in sa;
HOSTENT *hp;
SOCKET sock=NULL;

sock =socket(AF_INET,SOCK_STREAM,0);
if(sock==INVALID_SOCKET ) {
#ifdef _DEBUG
printf("Error :Can't initialize TCP/IP socket\n");
#endif
return INVALID_SOCKET;
}

hp=gethostbyname(Server);
if(!hp) {
#ifdef _DEBUG
printf("Error :Can't find this server :%s\n",Server);
#endif
return INVALID_SOCKET;
}

sa.sin_family = AF_INET;
sa.sin_addr.s_addr = *(unsigned long*)hp->h_addr; /* Server IP */
sa.sin_port = htons(port); /* Server Port number */

if (connect(sock,(struct sockaddr*)&sa,sizeof(sa))!=0){
#ifdef _DEBUG
printf("Error :Connection failed\n");
#endif
return INVALID_SOCKET;
}
#ifdef _DEBUG
printf("Connected to server :%s successfully\n",Server);
#endif
return sock;
}

//static char HTTP_Request[4096];

int HTTPGet(SOCKET sock,LPCSTR Resource)
{
char HTTP_Request[4096];
int length;
if(strlen(Resource)>4000)
return 0;
sprintf(HTTP_Request,"GET %s HTTP/1.0\r\n\r\n",Resource);
length=strlen(HTTP_Request);
#ifdef _DEBUG
printf("Send GET Request:\n%s",HTTP_Request);
#endif
return SockSendAll(sock,HTTP_Request,length);
}

void HTTPClose(SOCKET sock)
{
closesocket(sock);
}
#define HTTP_POST_FORMAT "POST %s HTTP/1.0\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\nReferer: http://%s/\r\nAccept-Language: en-us,zh-cn;q=0.8,zh-tw;q=0.5,zh-hk;q=0.3\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\nHost: %s\r\nContent-Length: %u\r\n\r\n%s"

int HTTPPost (SOCKET sock,LPCSTR Server,LPCSTR Resource,LPCSTR PostInfo)
{
char HTTP_Request[4096];
if(strlen(Resource)+strlen(PostInfo)>4000)
return 0;
sprintf(HTTP_Request,HTTP_POST_FORMAT,Resource,Server,Server,strlen(PostInfo),PostInfo);
#ifdef _DEBUG
printf("Send POST Request:%s",HTTP_Request);
#endif

return SockSendAll(sock,HTTP_Request,strlen(HTTP_Request));
}
pipu 2000-09-05
  • 打赏
  • 举报
回复
请问maptrix如果用socket实现可不可以给我一段代码,来模拟post或get请求,向服务器端。
maptrix 2000-09-05
  • 打赏
  • 举报
回复
两者的区别就是,请求的方式一个是GET,一个是POST,两者都能向服务器端传递参数,但是服务器端能判断出来,客户的请求是GET或是POST。
如果服务器短的程序对GET的请求方法不予支持,就没有办法通过直接输入url来完成,这要看服务器端的程序是如何编的,是不是对GET和POST都支持。
不过好在不管是GET或是POST都是用TCP/IP连接,你用VC来实现,就不会有什么大的障碍了。你完全可以通过SOCKET来模拟一个GET的请求或者是POST的请求,向服务器端发出,来完成手机短消息的发送。
airman 2000-09-05
  • 打赏
  • 举报
回复
用get方法是这样直接在url中传送
但它用的是post传送

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧