笔者这几天被soap通信搞的死去活来
贴个soap的普及url:有兴趣的童鞋可以看下简单对象访问协议_百度百科baike.baidu.com
笔者之前接触的都是restful接口,突然接到个需求是webservice的
不能怪我知识面窄,因为我处的时代就是restful的
'''貌似暴露了年龄[ε=ε=ε=┏(゜ロ゜;)┛逃]'''
先来说下web的接口模式
大概在几年之前restful开始流行,以前都是webservice的天下
其中,soap是webservice里一种比较流行的通信方式
怎么理解呢?
就是参数通过soap去传递
restful都是url?username="root" 这样的传参模式
而soap则很冗长
soap一般常见的是wsdl的方式进行处理,wsdl也就是定义好的的模板,百度一下基本都是这样的
然后,就因为这样,搞的笔者入坑良久才出来
因为,笔者这个接触的是没有wsdl的 (甚至就一度怀疑自己智障,为什么就response error)
举个例子:
import requests
soapmessage = ''' <?xml version="1.0" encoding="utf-8"?>
.........
'''
re = requests.post(url,soapmessage,header)
print(re.content)
第一步:
需要定义一个soap的消息告诉server你传参的是啥。
soap就已经不懂了,还得让我写个soapmessage xml格式 [日了狗了]
第二步:
常规的http请求(走post),需要注意的是header,不同的程序,需要不同的header
以上这2步是很重要的元素,少一个都无法完成,而且error贼多
笔者拿到的开发文档如下
which may be called with the SOAP or XML-RPC protocols, using HTTP (or preferably, HTTPS) as a transport layer
[大写的黑人问号]
就没有了??,是的,就没有了。这个就是我拿到的的开发文档
然后再告诉我了参数的名称。
怎么传????
传哪????
header多少???
一概不知
先说重点:
1,web日志开启debug
2,应用开启debug
3,F12
4,对比客户端访问的情况来调整sdk的访问情况
然后笔者就这样被折磨了一个5天,说说我都干了啥:
1,什么是soap
2,soapmessage怎么写
3,看程序的源码(日了狗,是perl的,是我完全不懂的perl写的,痛苦不言而喻)
4,漫长的debug路程
终于在今天,也就是20180708 (周日) 完成了第一个功能login。。。。。=。=||
我的周末呀,就这样的没了。想说:《我不是药神》真心好看
update:2018/07/09
痛苦呀,痛苦呀
完成了login之后,执行功能函数的时候又报错了 ///orz 请收下我的膝盖
Your session has expired.403
老长一段xml中就看到了error
不过有提示至少有个方向:
Your session has expired
猜测应该是check session的时候不通过
直接上解决方案吧:
在soapmessage中添加sessionid的参数,在struct中增加,因为server定义了参数需要放置在struct中方能识别
5b431493cf9e0a2effjjkl
遇到的坑:
1,在header中增加cookie (常规都是通过header增加session的,尤其是玩过爬虫的小伙伴)
2,调整函数的执行逻辑
3,撸源码(万恶的perl)
当给的回执xml又是冗长一段的时候,我的502都不够用了(502干嘛用,粘我碎掉的♥呀)
,but,我没有找到session的字眼,又看了一遍真的是没有session的字眼,好像有个ok。
定睛一看
OK200
笔者赶紧点开web,特么的居然成功了。。。。
重点:了解server端定义的soap通信方式真的很重要
就是因为手中的开发文档就特么一句话,所以导致笔者走了很长一段痛苦的弯路
#which may be called with the SOAP or XML-RPC protocols, using HTTP (or preferably, HTTPS) as a transport layer