Python删除请求休息api(在gae上)

NBa*_*nca 5 python google-app-engine json web-applications spotify

搜索了一段时间后,我找到了以下解决方案,用于需要Delete方法的api调用.

首先尝试:(httplib库)

    url = '/v1/users/'+ spotify_user_id +'/playlists/'+ playlist_id +'/tracks'
    data = json.dumps({"tracks": [{ "uri" : track_uri }]})
    headers = {
        'Authorization' : 'Bearer ' + access_token,
        'Content-Type' : 'application/json'
        } 

    conn = httplib.HTTPSConnection('api.spotify.com')
    conn.request('DELETE', url , data, headers) 
    resp = conn.getresponse()
    content = resp.read()
    return json.loads(content)
Run Code Online (Sandbox Code Playgroud)

返回:

{u'error':{u'status':400,u'ssssage':u'Empty JSON body.'}}

第二次尝试:(urllib2库)

    url = 'https://api.spotify.com/v1/users/'+ spotify_user_id +'/playlists/'+ playlist_id +'/tracks'
    data = json.dumps({"tracks": [{ "uri" : track_uri }]})
    headers = {
        'Authorization' : 'Bearer ' + access_token,
        'Content-Type' : 'application/json'
        } 

    opener = urllib2.build_opener(urllib2.HTTPHandler)
    req = urllib2.Request(url, data, headers)
    req.get_method = lambda: 'DELETE'

    try:
        response = opener.open(req).read()
        return response
    except urllib2.HTTPError as e:
        return e
Run Code Online (Sandbox Code Playgroud)

返回:

HTTP 400错误请求

我有JSON工作的其他功能,所以我想问题是DELETE方法,但我不能让它工作.

除此之外,webapp正在谷歌应用程序引擎上运行,所以我无法安装数据包,所以我想留在预安装的图书馆.
任何人都有一个很好的方法在GAE上做删除请求?(我需要发送数据和标题)

该API是spotify:developer.spotify.com/web-api/,我正在尝试从播放列表中删除曲目.

NBa*_*nca 3

经过大量研究后,我发现这是不可能的。

正如RFC 7231中所述(感谢@lukasa指出 RFC 2616 已过时),关于 DELETE 方法:

DELETE 方法请求源服务器删除目标资源与其当前功能之间的关联。 实际上,这种方法类似于 UNIX中的rm命令:它表达的是对源服务器的URI映射的删除操作,而不是期望删除先前关联的信息。

也就是说,删除曲目不需要在正文中传递 track_uri,但它应该在 URI 中。

另外,在 RFC 中:

DELETE 请求消息中的有效负载没有定义的语义;在 DELETE 请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。

Google App Engine 就是这种情况之一,不允许 DELETE 请求有正文。

话虽如此,Spotify 的回应还是有道理的:

空 JSON 正文。

在谷歌应用程序中获取 URL 的最佳方法可能是他们的 API,我正在使用它来处理其余的请求。(对于那些使用 GAE 并在 httplib、urllib2 和其他之间挣扎的人)。

我用来参考的帖子是这个

我问 Spotify 是否有替代方案,他们的回应是删除了我对 Disqus 的评论!