我有一台服务器在运行:
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 :(得分:1)
json.load
用于文件或类文件对象。对于普通字典,您需要json.loads
。
修改强>
你的字符串无效JSON:因为你需要双引号,而不是单引号。
但我不明白为什么你这样做。这是错误的方式:loads
将JSON字符串转换为Python对象,但conn.request
首先需要一个字符串。我怀疑你想从Python dict开始,将其转换为JSON,然后将其传递给请求:
params = json.dumps({'op' : 'sign'})
答案 1 :(得分:1)
您需要使用json.loads
代替json.load
。
至于第二个错误,你必须首先确保你的字符串是一个json对象。试试这段代码:
import httplib, urllib, json
jsonObject = json.dumps("{'op' : 'sign'}")
params = json.loads(jsonObject)
...