Python+Post请求中涉及到多个参数data方法的应用

进行post请求,Python提供了httplib、urllib2,同时也可以引用requests模块的一些方法。前几天做持续集成,运用requests写了一个post请求。代码如下:

import reuqests

xmlhead = ('<?xml version=\'1.0\' encoding=\'UTF-8\'?>'+'<InterBOSS>'+'<Value>0100</Value>'+.......)

xmlbody= ('<?xml version=\'1.0\' encoding=\'UTF-8\'?>'+'<InterBOSS>'+.........)

headers={'content-type' : 'text/xml'}

requests.post('http://192.168.1.1:8080/xxxxx', data = {'xmlhead': 'xmlhead', 'xmlbody' : 'xmlbody'})

代码写好后运行,请求报了空指针异常。定位jAVA工程代码,看到JAVA工程里的xmlhead加载的内容为空。花费了好长时间,没有解决此问题。

试一下urllib2,看看是否报空指针异常。代码如下:

import urllib2

import urllib

xmlhead = ('<?xml version=\'1.0\' encoding=\'UTF-8\'?>'+'<InterBOSS>'+'<Value>0100</Value>'+.......)

xmlbody= ('<?xml version=\'1.0\' encoding=\'UTF-8\'?>'+'<InterBOSS>'+.........)

data = {'xmlhead' : 'xmlhead', 'xmlbody' : 'xmlbody'}

urllib2.urlopen( url='http://192.168.1.1:8080/xxxxx',

urllib.urlencode(data))

发送请求后报空指针异常。

最后定位发现data写的有问题。把data = {‘xmlhead’: 'xmlhead', 'xmlbody' : 'xmlbody'}改为data = {'xmlhead' : xmlhead, 'xmlbody' : xmlbody}问题解决。

data后边一般是等于字典,字典的key、value值习惯于加引号。个人认为本脚本中的value值:xmlhead、xmlbody是一个字符串赋予的值。post请求发送后,工程代码通过xmlhead、xmlbody加载对应的字符串。如果value值也加上引号,工程里的xmlhead、xmlbody识别不到参数,就要报空指针异常了。