urlphetch PUT正在发送Post请求?

2024-10-01 07:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用mongolabrestapihttp://docs.mongolab.com/data-api/更新MongoDB数据库中的文档。在

在文档中,它说使用PUT请求来更新集合中的文档,在http请求的主体中使用update操作符。在

因此,根据文件,我尝试以下方法:

        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响应是

^{pr2}$

这是令人费解的,因为它说的答复是成功的和一个帖子。在

你知道到底发生了什么吗?在


Tags: key文档formcomapi数据库docsfields
1条回答
网友
1楼 · 发布于 2024-10-01 07:18:19

str.format()返回格式化字符串,它不会就地更新。因此

urlinsert.format(q=querycheck, key=CONFIG["key"])

urlinsert的值没有影响,并且发送查询字符串apiKey={key}&q={q}。试试这个:

^{pr2}$

看看mongodb的响应主体中包含了什么是很有趣的—它可能包含一条错误消息。在


更新

现在您已经设置了Content-Type: application/json头,您需要在有效负载中发送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'})

相关问题 更多 >