Python post调用不起作用

时间:2014-10-20 08:27:48

标签: python http post

我有一台服务器在运行:

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'

我犯了错误?

2 个答案:

答案 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)
...