Python请求模块 - POST失败 - 无效字符'o'

时间:2016-01-27 16:26:00

标签: python python-2.7 rest curl jboss

我正在尝试将原始curl命令转换为使用Python请求模块而没有运气。这是查询JBoss Mgmt接口的简单请求,但它没有正确解析我的JSON。

16:34:26,868 DEBUG [org.jboss.as.domain.http.api] (HttpManagementService-threads - 15) Unable to construct ModelNode 'Invalid character: o'

Python版

Python 2.7.6

使用原始cURL命令:

/usr/bin/curl --digest -v -L -D - 'http://brenn:!12rori@localhost:9990/management' --header Content-Type:application/json '-d {"operation":"read-attribute","name":"server-state","json.pretty":1}'

在python代码中,我读取了我的REST / cURL有效负载,如此

import requests
----
def readconfigfile():
    with open('jboss_modification.cfg') as f:
        lines = f.readlines()
    return lines

配置文件看起来像这样

{"operation":"read-attribute","name":"server-state","json.pretty":1}

我将str格式从readconfigfile()转换为字典,如下所示

def converttodictionary(incominglines):
commands = []
for lin in incominglines:
    #dumps = json.dumps(lin)
    obj = json.loads(lin)
    commands.append(obj)
return commands

执行此请求的python代码如下

def applyconfig(lines):
    url="http://localhost:9990/management"
    auth=HTTPBasicAuth('brenn', '!12rori')
    s = requests.Session()
    re=s.get(url,  auth=HTTPDigestAuth('brenn', '!12rori')) ##200 RESP
    s.headers.update({'Content-Type': 'application/json'})
    for line in lines:
        payload=line
        r=s.post(url,payload)
        print(r.text)

任何帮助都非常感激?

注意:由于我解决了其他问题,这个问题已经更新了几次....

1 个答案:

答案 0 :(得分:1)

问题是......

初始JSON请求失败,因为当我从文件python中读取它时被解释为str。

使用json.loads和服务器接受的请求转换为字典但无法解析带有非法字符错误的JSON

使用json.dumps将此json转换回str - 在我看来,这看起来就像我在第一时间尝试做的那样 - 现在可行了

  1. 按照上面的def readconfigfile():
  2. 读取JSON文件
  3. 根据上面的def converttodictionary转换为json / dictionary:json.loads(lin)
  4. 使用json.dumps和POST将此json“back”转换为字符串,如下所示

    payload = json.dumps(command)
    
    r = session.post(url, payload,auth=HTTPDigestAuth('brenn', '!12rori')