如何用C++通过http协议 发送xml数据给服务器端

如何用C++通过http协议 发送xml数据给服务器端,第1张

public void sendXmlTest() throws Exception{

//通过类装载器装载XML资源

InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("test.xml")

byte[] xml=StreamTool.read(inputStream)

String path="http://172.22.35.112:8080/videonews/GetXmlInfo"

URL url=new URL(path)

HttpURLConnection conn=(HttpURLConnection) url.openConnection()

conn.setRequestMethod("POST")

conn.setConnectTimeout(5000)

conn.setDoOutput(true)

//设置HTTP请求碰悔的头字段

conn.setRequestProperty("Content-Type", "text/xmlcharset=UTF-8")//内容类桥闹型

conn.setRequestProperty("Content-Length", String.valueOf(xml.length)) //实体内容的长度

conn.getOutputStream().write(xml) //通过输出流把数据写到服务笑消正器

if(conn.getResponseCode()==200){

System.out.println("发送成功!")

}else{

System.out.println("发送失败!")

}

}

服务器端:

byte[] xml=StreamTool.read(request.getInputStream()) //获得输出流

System.out.println(new String(xml,"UTF-8"))

当send方法成功后才可调用该方法。如果服务器返回的文档类型为"text/xml", 则这句话xmlhttp.getResponseHeader("Content-Type")将返回字符串"text/xml"。 可以使用getAllResponseHeaders方法获取完整的http头信息。

Xmlhttp是一种浏览器对象, 可用于模拟http的GET和POST请求。配合JavaScript可以实现页面数据在无刷新下的定时数据更

新,如果应用在聊天室、文字直播上可以取得较好的视觉效果。

IE中的 XmlHttp对象

在IE中XmlHttp被实现为ActiveX对象,通常使用

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")

来创建一个对象,然后使用该对象的open方法来发出一个Http请求。

xmlhttp.open("GET", fragment_url)

这时候浏览器已经发出了模答迹Http请求,我们需要注册一个匿名函数给XmlHttp对象的onreadystatechange方法,这样当请求旦并返回

时,xmlhttp就会自动调用我们注册的这个函数,下边是一个实际的例子。

xmlhttp.onreadystatechange = function()

{

if (xmlhttp.readyState == 4 &&xmlhttp.status == 200)

{

element.innerHTML = xmlhttp.responseText

}

}

因为我们不需要再发送任何信息,所以用下边的语句结束

xmlhttp.send(null)

我们将上边的过程封装为一个函数,下边是这个函数的完整代码:

function loadFragmentInToElement(fragment_url, element_id)

{

var element = document.getElementById(element_id)

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")

xmlhttp.open("GET", fragment_url)

xmlhttp.onreadystatechange = function()

{

if (xmlhttp.readyState == 4 &&xmlhttp.status == 200)

{

element.innerHTML = xmlhttp.responseText

}

}

xmlhttp.send(null)

PHPMORE VOL5 24/26

}

函数的调用方法如下所示:

loadFragmentInToElement( , DynamicContent_id )

有了上边的代码, 再配合JavaScript的定时函数, 我们就可以实现定时的无刷新数据更新了, 下边这个函数每隔5秒对element_id

的数据进行一次更新。

function refresh( element_id )

{

loadFragmentInToElement( show.php , + element_id )

setTimeout( "refresh(ts)" , 5000 )

}

在 IE上使用XmlHttp要注意的问题

特别要注意的是由于IE的Cache的关系,我们看见的XmlHttp并不总举陪是最新读取的那一个,为了让IE不启用Cache,我们发送给

IE一个特殊的Header,用PHP实现如下:

header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" )

header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" )

header( "Cache-Control: no-cache, must-revalidate" )

header( "Pragma: no-cache" )

XmlHttp对象在Gecko上的实现

Gecko上的XmlHttp和IE上略有不同,它并不需要通过ActiveX来创建。另外回调函数必须在open方法之前注册,而IE并不要

求,这是一个很需要注意的问题。

使用JavaScript实现XmlHttp的跨浏览器应用

为了能在多种浏览器上有一个统一的实现, 我们可以用JavaScript来对不同浏览器的差异进行封装。 这里我们采用Andrew Gregory

的实现。首先我们要引用Andrew Gregory的一个名为xmlhttprequest.js的Js脚本。

然后在创建XmlHttp对象时统一使用new XMLHttpRequest()就可以了; 其它的方法不用改变。 这个Js脚本运行我们在IE、 Gecko

(Mozilla/FireFox) 和Opera的特定版本使用XmlHttp。下边是调整后的loadFragmentInToElement函数, 这个函数在IE6

和FireFox1.0pre上运行通过。

xmlhttprequest.js文件和具体的使用例子可以在我写的一个DEMO中找到。

XmlHttp中的中文乱码问题

在默认情况下,XmlHttp都是使用Utf-8字符集,而我们使用的多是GB2312字符集,这就要求我们进行GB2312到Utf-8的转码。

PHP提供了一个可选的专码模块,可以实现多种字符集之间的相互转化。加载这个专码模块的方法如下:

打开 PHP 配置文件 php.ini,将 extension=php_mbstring.dll(*nix 是 php_mbstring.so) 前的分号去掉。重新启动

Apache以后,这个模块就可以使用了。如果有错误出现,请检查扩展目录的路径设置是否正确。

加载这个模块以后,我们就可以使用mb_convert_encoding函数来转码了:

$utf8_string = mb_convert_encoding( $gb_string , UTF-8 , GB2312 )

将转码后的字符输出就可以看见正确显示的中文

我是做网站建设和asp.net程序培训的

桂林网站建设:

简单描述如果在javascript下使用XMLHTTP对象.

MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。

1.创建XMLHTTP对象:

(1)var xmlhttp = new ActiveXObject("Microsoft")

(2)var xmlhttp = new ActiveXObject("MSXML1")

(3)var xmlhttp = new ActiveXObject("MSXML2")

(4)var xmlhttp = new ActiveXObject("MSXML3")

2.初始化:

xmlhttp.open(http-method, url, async, userID, password)

其中前三个参数是必须的.

http-method: POST OR GET

url: 请求的地址,不带查询参数

async: boolean的值,说明请求是否为异步的.如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他 *** 作

3.设置HTTP头

xmlhttp.set(headName, headValue)

如:

xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")

可以不设置HTTP头.

4.发送请求

xmlhttp.send(XML-DATA)

XML-DATA可以是任意类型的值.一般用于发送查询参数,如xmlhttp.send("type=1&color=2")

5.检查状态

XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:

值 说明

0 Response对象已经创建,但XML文档上载过程尚未结束

1 XML文档已经装载完毕

2 XML文档已经装载完毕,正在处理中

3 部分XML文档已经解析

4 文档已经解析完毕,客户端可以接受返回消息

6.客户机处理响应

可通过XMLHTTP对象的三个属性来获得响应:

(1)responseTxt:将返回消息作为文本字符串;

(2)responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;

(3)responseStream:将返回消息视为Stream对象。

如:var xmlfile=xmlhttp.responseXML.documentElement

我是做网站建设和asp.net程序培训的

桂林网站建设:

现在sql2005可以直接接受xml数据,只要你逻辑层,把旅逗表示层数据构造好xml文件,直接提交纯兆到相应的xml字段就可以

using System

using System.Collections.Generic

using System.IO

using System.Text

using System.Net

using System.Web

namespace Deerchao.Utility

{

public class HttpClient

{

#region fields

private bool keepContext

private string defaultLanguage = "zh-CN"

private Encoding defaultEncoding = Encoding.UTF8

private string accept = "*/*"

private string userAgent = "Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.2SV1.NET CLR 1.1.4322.NET CLR 2.0.50727)"

private HttpVerb verb = HttpVerb.GET

private HttpClientContext context

private readonly List<HttpUploadingFile>files = new List<HttpUploadingFile>做镇租()

private readonly Dictionary<string, string>postingData = new Dictionary<string, string>()

private string url

private WebHeaderCollection responseHeaders

private int startPoint

private int endPoint

#endregion


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12261907.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存