通过python将json数据发送到php api

时间:2016-01-20 19:21:05

标签: php python json

我是python的新手。我创建了一个基于gui的应用程序来将值插入数据库。 我创建了一个Rest api来处理db操作。如何使用在python中创建的json附加api URL。

app.py

from Tkinter import *
import tkMessageBox
import json
import requests
from urllib import urlopen


top = Tk()
L1 = Label(top, text="Title")
L1.pack( side = TOP)
E1 = Entry(top, bd =5)
E1.pack(side = TOP)


L2 = Label(top, text="Author")
L2.pack( side = TOP)
E2 = Entry(top, bd =5)
E2.pack(side = TOP)

L3 = Label(top, text="Body")
L3.pack( side = TOP)
E3 = Entry(top, bd =5)
E3.pack(side = TOP)
input = E2.get();

def callfunc():
data = {"author": E2.get(),
    "body" : E3.get(),
    "title" : E1.get()}
data_json = json.dumps(data)

# r = requests.get('http://localhost/spritle/api.php?action=get_uses')
#url = "http://localhost/spritle/api.php?action=insert_list&data_json="
#
url = urlopen("http://localhost/spritle/api.php?action=insert_list&data_json="%data_json).read()

tkMessageBox.showinfo("Result",data_json)
 SubmitButton = Button(text="Submit", fg="White", bg="#0094FF", 
                  font=("Grobold", 10), command = callfunc)
 SubmitButton.pack()


 top.mainloop()

错误:

TypeError: not all arguments converted during string formatting

我在使用data_json附加网址时出现错误?

2 个答案:

答案 0 :(得分:0)

字符串格式化时出错:

交换:

"http://localhost/spritle/api.php?action=insert_list&data_json="%data_json

由此:

"http://localhost/spritle/api.php?action=insert_list&data_json=" + data_json

或:

"http://localhost/spritle/api.php?action=insert_list&data_json={}".format(data_json)

以下陈述是等同的:

"Python with " + "PHP"
"Python with %s" % "PHP"
"Python with {}".format("PHP")
"Python with {lang}".format(lang="PHP") 

另外,我不认为通过URL发送这样的JSON数据是一个好主意。您应该至少对数据进行编码。

答案 1 :(得分:0)

您正尝试使用%运算符格式化字符串,并且需要将%s占位符放入字符串中:

"http://localhost/spritle/api.php?action=insert_list&data_json=%s" % data_json

或者使用其他答案中建议的其他方法。

关于数据传输 - 你肯定需要使用POST请求而不是GET。 查看this, using urllib2this, using requests