進行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識別不到參數,就要報空指針異常了。