UrlFetch PUT 正在发送 Post 请求?
UrlFetch PUT is sending a Post Request?
我正在尝试使用 MongoLab Rest API http://docs.mongolab.com/data-api/ 更新 MongoDB 数据库中的文档。
在文档中它说使用 PUT 请求更新集合中的文档,并在 http 请求的正文中使用更新运算符。
因此,根据文档,我尝试了以下操作:
urlinsert = 'https://api.mongolab.com/api/1/databases/ur_coursesniper/collections/classes?apiKey={key}&q={q}'
urlinsert = urlinsert.format(q=querycheck, key=CONFIG["key"])
form_fields = {
"$push" : { "Users" : email},
}
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url=urlinsert,
payload=form_data,
method=urlfetch.PUT,)
但是,此代码块执行后集合中的文档不会更新。
我收到的 HTTP 响应是
2015-08-16 10:55:45,129 module.py:812] default: "POST / HTTP/1.1" 200 91
这令人费解,因为它表示响应既成功又 POST。
对到底发生了什么有什么想法吗?
str.format()
returns 格式化字符串,它不会更新到位。因此
urlinsert.format(q=querycheck, key=CONFIG["key"])
对urlinsert
的值没有影响,发送查询字符串apiKey={key}&q={q}
。试试这个:
urlinsert = urlinsert.format(q=querycheck, key=CONFIG["key"])
看看 mongodb 响应的 body 中包含的内容会很有趣 - 它可能包含一条错误消息。
更新
现在您正在设置 Content-Type: application/json
header,您需要在负载中发送 JSON 数据。 "$push" : { "Users" : email}
无效 JSON。您可以使用 json.dumps()
将 form_fields
字典转换为有效的 JSON 字符串:
import json
urlinsert = 'https://api.mongolab.com/api/1/databases/ur_coursesniper/collections/classes?apiKey={key}&q={q}'
urlinsert = urlinsert.format(q=querycheck, key=CONFIG["key"])
form_fields = {"$push": {"Users": email}}
result = urlfetch.fetch(url=urlinsert,
payload=json.dumps(form_fields),
method=urlfetch.PUT,
headers={'Content-Type': 'application/json'})
我正在尝试使用 MongoLab Rest API http://docs.mongolab.com/data-api/ 更新 MongoDB 数据库中的文档。
在文档中它说使用 PUT 请求更新集合中的文档,并在 http 请求的正文中使用更新运算符。
因此,根据文档,我尝试了以下操作:
urlinsert = 'https://api.mongolab.com/api/1/databases/ur_coursesniper/collections/classes?apiKey={key}&q={q}'
urlinsert = urlinsert.format(q=querycheck, key=CONFIG["key"])
form_fields = {
"$push" : { "Users" : email},
}
form_data = urllib.urlencode(form_fields)
result = urlfetch.fetch(url=urlinsert,
payload=form_data,
method=urlfetch.PUT,)
但是,此代码块执行后集合中的文档不会更新。
我收到的 HTTP 响应是
2015-08-16 10:55:45,129 module.py:812] default: "POST / HTTP/1.1" 200 91
这令人费解,因为它表示响应既成功又 POST。
对到底发生了什么有什么想法吗?
str.format()
returns 格式化字符串,它不会更新到位。因此
urlinsert.format(q=querycheck, key=CONFIG["key"])
对urlinsert
的值没有影响,发送查询字符串apiKey={key}&q={q}
。试试这个:
urlinsert = urlinsert.format(q=querycheck, key=CONFIG["key"])
看看 mongodb 响应的 body 中包含的内容会很有趣 - 它可能包含一条错误消息。
更新
现在您正在设置 Content-Type: application/json
header,您需要在负载中发送 JSON 数据。 "$push" : { "Users" : email}
无效 JSON。您可以使用 json.dumps()
将 form_fields
字典转换为有效的 JSON 字符串:
import json
urlinsert = 'https://api.mongolab.com/api/1/databases/ur_coursesniper/collections/classes?apiKey={key}&q={q}'
urlinsert = urlinsert.format(q=querycheck, key=CONFIG["key"])
form_fields = {"$push": {"Users": email}}
result = urlfetch.fetch(url=urlinsert,
payload=json.dumps(form_fields),
method=urlfetch.PUT,
headers={'Content-Type': 'application/json'})