在https的链接中vb使用post提交xml数据
来源:互联网 发布:惠州淘宝培训班 编辑:程序博客网 时间:2024/04/30 20:14
由于工作需要,需要vb提交xml数据到服务器上,所以,需要找到一个好的方法。
之前有代码使用了MSXML2.XMLHTTP对象进行xml数据取得,而且链接是https形式的,于是就参照代码提交,写了下面这么一个函数,来进行操作
1 Private Function CallAPI(url1 As String, filePath As String) 2 'load file 3 Dim document As MSXML2.DOMDocument 4 Set document = CreateObject("MSXML2.DOMDocument") 5 document.Load filePath 'load xml file 6 'send data to server 7 Dim xmlHttp As MSXML2.XMLHTTP 8 Set xmlHttp = CreateObject("MSXML2.XMLHTTP") 9 xmlHttp.Open "POST", url1, False 'post method to10 xmlHttp.setRequestHeader "Content-Type", "application/xml" 'xml type of http request xml,not text/xml11 xmlHttp.send (document.xml)12 'clear13 Set xmlHttp = Nothing14 Set document = Nothing15 End Function
但是,提交总是失败,在下面的这句代码就被中断,一直找不到原因。
1 xmlHttp.send (document.xml)
突然想到http协议和https协议是不同的,可能在提交数据时有差异,猜测MSXML2.XMLHTTP对象应该不支持https,经过寻找找到另一个对象WinHttp.WinHttpRequest,于是有了下面的代码
1 Private Function CallAPI(url1 As String, filePath As String) 2 'load file 3 Dim document As MSXML2.DOMDocument 4 Set document = CreateObject("MSXML2.DOMDocument") 5 document.Load filePath 6 7 Dim xmlHttps As WinHttp.WinHttpRequest 8 Set xmlHttps = CreateObject("WinHttp.WinHttpRequest.5.1") 9 xmlHttps.Open "POST", url1, False10 xmlHttps.setRequestHeader "Content-Type", "application/xml"11 12 xmlHttps.send document.xml13 14 DoEvents15 16 End Function
执行了上面的代码之后程序正常结束,但是远端的服务器中的数据没有变化,查看了xmlHttps.status之后发现,提示没有权限,嗯,服务器那边需要用户名和密码验证的,这边没有设置登录用户名和密码,于是加了一句
1 Private Function CallAPI(url1 As String, filePath As String) 2 'load file 3 Dim document As MSXML2.DOMDocument 4 Set document = CreateObject("MSXML2.DOMDocument") 5 document.Load filePath 6 7 Dim xmlHttps As WinHttp.WinHttpRequest 8 Set xmlHttps = CreateObject("WinHttp.WinHttpRequest.5.1") 9 xmlHttps.Open "POST", url1, False10 xmlHttps.setRequestHeader "Content-Type", "application/xml"11 xmlHttps.SetCredentials "用户名 ", "密码", HTTPREQUEST_SETCREDENTIALS_FOR_SERVER12 13 xmlHttps.send document.xml14 15 DoEvents16 17 End Function
执行了代码之后发现,xml对象的数据被正常提交。
总结:
1. MSXML2.XMLHTTP对象不能提交https数据到服务器上
2. WinHttp.WinHttpRequest对象需要显式的设置用户名和密码,在MSXML2.XMLHTTP对象使用的过程中,没有登录的话,会弹出用户名和密码输入框,而WinHttp.WinHttpRequest对象没有,直接提交数据后,提示没有权限
3. 提交xml对象时,设置的请求头部应该是"Content-Type", "application/xml"而不是"Content-Type", "text/xml"
其它对象也可以达到https提交的效果:
1 ... 2 Dim serverxml As MSXML2.ServerXMLHTTP3 Set serverxml = CreateObject("MSXML2.ServerXMLHTTP")4 serverxml.Open "POST", url1, False, "用户名", "密码"5 serverxml.setRequestHeader "Content-Type", "application/xml"6 serverxml.send document.xml7 ...
注:WinHttp.WinHttpRequest对象需要添加Microsoft WinHTTP Services, version 5.1组件的引用
MSXML2.XMLHTTP和MSXML2.ServerXMLHTTP需要添加Microsoft MsXml组件的引用
- 在https的链接中vb使用post提交xml数据
- PHP中CURL使用POST提交XML数据
- 在android中使用Post方式提交数据
- 在.NET 中模拟提交Post数据
- 在.NET 中模拟提交Post数据
- java中使用post提交数据
- delphi 中 使用 TIdHTTP 提交Post数据
- 需要解决post提交数据的时候,乱码的问题:在web.xml里做配置:
- 使用POST提交数据
- 在IE6中使用链接提交表单的问题
- https 的post数据
- HttpWebRequest使用POST提交数据的
- post提交中神秘消失的post数据
- 客户端POST提交、服务器返回Xml格式数据的demo
- PHP post提交xml 以及获取post过来的xml数据
- laraval中使用post提交数据中报token的问题
- PHP使用CURL模拟POST/GET方式提交数据,支持HTTPS请求
- 使用Post方式提交数据
- 使用自定义视图的AlertDialog
- Android中去掉显示标题的方法
- 美团酒店Node全栈开发实践
- bzoj2697: 特技飞行
- VB调用WebService(直接Post方式)并解析返回的XML
- 在https的链接中vb使用post提交xml数据
- 电子线路设计技巧2:0603 1%电阻阻值表示方法
- 黑马程序员_Vector、LinkedList、ArrayList集合
- github团队合作管理代码
- Spark内核天机解密(2016)第三讲 Scala函数式编程
- luerl 测试用例
- 自己第一次为cell写的协议方法
- 跟我学习dubbo-简介(1)
- QT中QMainWindow手动添加菜单栏以及其他控件