WEB_HTTP GET-POST 命令消息查看器

WEB_HTTP GET-POST 命令消息查看器

作者 Adrian Bacaianu

本文介绍了一个用于从WEB服务器上查看使用HTTP GETPOST命令的原始信息的工具。

简介

This utility is just a wrapper around reusable functions that allow programmatic access to the web through a sort of 'mini-browser' embedded inside your program.

[空白,翻译中...]

这些代码很有用处。比如,有些叫做spidersbotscrawlers的一些程序,着眼于一连串的网页,象用户如何从一个网页冲浪到另一个网页。这些程序通常用于对网页进行分类、从网页导入外部数据或者简单的向一个WEB服务器发送一个命令。你可以扩展我们在这提供的类的功能来实现以多种方式从Internet接收信息。

有很多从网站获取数据的第三方DLL动态库和方案。本文提供的方法是完全独立的,它不依赖于WinInetInternet ExplorerNetscape或类似的软件已安装为前提,Winsock除外。WinsockWindows TCP/IP 协议栈的主体并且适用于任何一个可运行浏览器的计算机。

每个Internet 协议都被组织为一个RFCRequest For Comments)文档。HTTP协议在RFC1945中。另外,RFC1630, RFC1708 RFC1808 描述了URL的格式。

http://www.rfc-editor.org/ 可以找到完整的一套的RFC文档

实现

本程序的核心是Request类。它的关键方法是SendHTTP(),本方法接受5个参数返回一个整数。第一个参数是POSTGETURL。第二个参数指定一个要在本次请求的传递的HTTP 头部信息。第三个和第四个参数指定数据和上传数据长度。第五个参数是一个指向HTTPRequest结构体的用于保存HTTP 头部信息、已发送的和从WEB服务器返回的消息。SendHTTP()方法在POSTGET成功时返回0,否则1表示一个错误。

SendHTTP()方法首先处理URL字符串。一个URL是一个明确指定的Internet上的资源位置地址。一个URL有几部分组成,有些是可选的。一个URL的例子如下:
                                                   http://www.codetools.com/index.html


URL的第一部分是协议,它描述如何接收资源。协议后面是主机名称。它可以是一个域名称或一个IP地址。主机名称后面是一个端口号码。每一个协议在未明确指定端口的情况下都有一个默认的端口号。HTTP协议的默认端口号是80。端口号之后是一个指定的WEB服务器当前请求(?)。如果未指定,默认是'/',它请求WEB服务器的根目录。

接下来,SendHTTP()通过调用Winsock的WSAStartup()方法初始化WinSock库。然后建立一个socket连接,SendHTTP()发送一个请求到服务器。HTTP请求有两种形式。第一种,简单形式,就是 HTTP GET。

一个HTTP GET不发送任何附加信息到服务器,除了请求头部和URL。一个HTTP GET命名通常使用URL本身来发送附件信息:
http://localhost/projects/HTTP/TestGet.asp?name=fred&age=22

第二种形式,HTTP POST命令,它伴随发送请求来发送数据,但与URL分离开。

通常,一个HTTP POST命令包含如下头部:
Content-Type:application/x-www-form-urlencoded

没有该头部,某些Web服务器(典型的如运行在IIS上ASP)将不会重组你的参数。一个HTTP POST命令有两部分。第一部分是HTTP头部,就如同GET中的一样。头部包含实际的请求和附加的信息片断。与GET不同,一个POST命令在头部之后(通过一个空白行分离开)包含数据。

Web服务器收到GET或POST请求之后,它回送一个响应。响应包含两部分:头部信息及后面数据(以一个空白行分离这两部分)。

第一行是HTTP头部,它指定该请求的状态。它以一个数据错误码起始。

100-199 是一个信息消息或未使用.
200-299 请求成功.
300-399 指明请求的资源已删除; Web服务器用于重定向.
400-499 指明客户端错误.
500-599 指明服务器错误.

头部后面是GET或POST请求的数据。它们通常显示到浏览器的屏幕上。

对话框封装器

利用MFC对话框工程做一个Request类的封装器。在对话框容器上放入一个Microsoft Web Browser 控件的实例。他可以非常轻松的操纵数据,制作和GET、POST类似的命令。该控件用于两种途径:

1. 当用户使用浏览器产生一个请求,该控件触发被对话框程序捕捉的OnBeforeNavigate2事件。在这种情况下,在OnBeforeNavigate2Explorer1方法用于捕获GET或POST命令发送的头部信息和POST的数据。

2. If the user wants to use the
SendHTTP engine, enter the required URL, complete the 'SendHTTPrequest' and 'PostData' (if is a POST) fields, chack the radio button GET or POST and click on the 'Go' button. The IE control will load the HTML formatted data received from SendHTTP() function in the m_HTTPbody string variable. The HTML loading is done in OnButtonViewHttp().







IHTMLDocument2* pHTMLDocument2;
LPDISPATCH lpDispatch;
lpDispatch = m_Browser.GetDocument();
 
    
    
if (lpDispatch)
{
    HRESULT hr;
    hr = lpDispatch->QueryInterface(IID_IHTMLDocument2,
                                    (LPVOID*)&pHTMLDocument2);
    lpDispatch->Release();
    IHTMLElement* pBody;
    hr = pHTMLDocument2->get_body(&pBody);
 
    
    
    BSTR bstr;                
    bstr = m_HTTPbody.AllocSysString();
                 
    pBody->put_innerHTML(bstr);    //insert the html
            
    SysFreeString(bstr);
    pBody->Release();
}

用法

Input the URL address and click on the Go button. On the right there is a mini-browser with your page. Navigating on links and buttons on this page and in the 'PostData', 'SendHTTPrequest' and 'ReceiveHTTPrequest' will receive the corresponding data. The radio buttons Get/Post are modified automatically - the IE instance knows if you make an GET (you push on a link) or POST (you push a button).

输入URL地址、单击GO按钮。右侧将有一个显示你请求网页的微型浏览器。

You are able to input your header in the 'SendHTTPrequest' edit box and your POST data in the 'PostData' edit box, and then push the 'Go' button. The browser will navigate to your address using the headers and data submitted from 'SendHTTPrequest' and 'PostData' fields.

Use the TestGet.asp and TestPost.asp files from Web directory to test your GET/POST utility :

使用在Web目录的TestGet.asp 和TestPost.asp 文件来特使你的GET/POST工具:


关于作者

 

我从事编程已经超过4年并且在C++、ASPPascalMFCCOM+ATLTCP/IPHTTP 协议、XMLXSLSOAP SQL方面有广泛深厚的经验。
近两年我广泛从事财经网站后台(数据库、N 层架构)方面的工作。

要签约和(或)采购可通过adrian_bacaianu@yahoo.com与我取得联系。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值