我正在尝试使用urllib2.urlopen通过Facebook Graph API执行GET和POST请求。我从这里注意到:https://stackoverflow.com/questions/2690723/facebook-graph-api-and-django 我可以很容易地执行GET请求。
从这里开始:How to send a POST request using django?和Python文档http://docs.python.org/library/urllib2.html似乎需要数据参数来执行POST请求。
但是看看Facebook的API:http://developers.facebook.com/docs/reference/api/event/#invited它说
您可以通过发出HTTP POST来邀请用户参加活动 / EVENT_ID /邀请/ USER_ID
我不确定如何使用urlopen,因为直接打开此URL只会检查用户是否已被邀请,如API页面所述:
您可以检查特定用户是否已被邀请参加活动 向/ EVENT_ID / invite / USER_ID发出HTTP GET:
欣赏输入。
答案 0 :(得分:36)
听起来你想发送一个空的POST请求,即使urllib2.urlopen()只在你指定数据参数时发送一个帖子。
如果设置data ="",它实际上发送一个空的POST,并且仅当data = None时才发出GET请求:
urllib2.urlopen("http://127.0.0.1:8000", data="")
"POST / HTTP/1.1" 501 -
urllib2.urlopen("http://127.0.0.1:8000", data=None)
"GET / HTTP/1.1" 200 -
希望有所帮助。我从小HTTP服务器获得了响应打印输出,他们在这里有一个示例:http://docs.python.org/library/simplehttpserver.html
答案 1 :(得分:2)
发送空POST的另一种方法是创建一个Request并覆盖其get_method。在这种情况下,这是更多的工作,但在其他情况下可能更干净(例如,如果您已经有请求)。
request = urllib2.Request(url)
request.get_method = lambda: 'POST'
urllib2.urlopen(request)
get_method是一个返回要使用的方法的方法,所以我们在这里用一个返回'POST'的lambda函数覆盖它。
答案 2 :(得分:2)
直接来自Python (urllib2)文档
urllib2.urlopen(url [,data] [,timeout]) 打开URL url,可以是字符串或Request对象。 警告HTTPS请求不会对服务器的证书进行任何验证。 数据可以是指定要发送到服务器的其他数据的字符串,如果不需要此类数据,则为无。目前,HTTP请求是唯一使用数据的请求; 提供数据参数时,HTTP请求将是POST而不是GET。
答案 3 :(得分:0)
我认为你几乎已经回答了自己的问题,你只是过度思考......
邀请用户使用urlopen发出POST
要检查用户是否已被邀请,请发出带有详细信息的GET。
在这两种情况下,您都在使用相同的URL进行通信,区别在于GET或POST。
如果您不确定GET和带有urlopen的POST之间的区别,请阅读以下文档: