2014-10-20 38 views
0

我有一台服务器运行时:Python的来电后不工作

http://localhost:3000/appleconnect 

将接受后调用。所以我写了用于制作http请求的python代码,但是这不起作用:

import httplib, urllib, json 
params = json.load("{'op' : 'sign'}") 
headers = {"Content-type": "application/json", 
      "Accept": "text/plain"} 
conn = httplib.HTTPConnection("localhost:3000") 
conn.request("POST", "/appleconnect", 
      params, headers) 
response = conn.getresponse() 
print response.status, response.reason 
data = response.read() 
conn.close() 

上述操作无效。它给我这样的错误:

Traceback (most recent call last): 
    File "post.py", line 2, in <module> 
    params = json.load("{'op' : 'sign'}") 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 286, in load 
    return loads(fp.read(), 
AttributeError: 'str' object has no attribute 'read' 

我在哪里犯错?

+0

什么是“application/application/json”? – 2014-10-20 08:29:25

+0

很抱歉更新了我的代码。 – batman 2014-10-20 08:32:43

回答

1

您需要使用json.loads,而不是json.load。 至于第二个错误,你必须确保你的字符串是第一个json对象。试试这个代码:

import httplib, urllib, json 
jsonObject = json.dumps("{'op' : 'sign'}") 
params = json.loads(jsonObject) 
... 
1

json.load适用于文件或文件类对象。对于一个普通的字典,你需要json.loads

编辑

您的字符串不是有效的JSON:对,你需要双引号,而不是单一的。

但我不明白你为什么这样做。这是一个错误的方法:loads将JSON字符串转换为Python对象,但conn.request首先需要一个字符串。我怀疑你想用Python字典开始,将其转换成JSON,然后传递到请求:

params = json.dumps({'op' : 'sign'}) 
+0

现在出现以下错误:“File”post.py“,第2行,在 params = json.loads(”{operation:'signout'}“) 。 。 。 ValueError:期望属性名称:第1行第2列(char 1)' – batman 2014-10-20 08:39:47