16

我正在尝试使用 urllib2.urlopen 通过 Facebook Graph API 执行 GET 和 POST 请求。我从这里注意到:https ://stackoverflow.com/questions/2690723/facebook-graph-api-and-django 我可以很容易地执行 GET 请求。

从这里开始:如何使用 django 发送 POST 请求?和 Python 文档http://docs.python.org/library/urllib2.html似乎它需要数据参数来执行 POST 请求。

但是看看 Facebook 的 API:http: //developers.facebook.com/docs/reference/api/event/#invited它说

您可以通过向 /EVENT_ID/invited/USER_ID 发出 HTTP POST 来邀请用户参加活动

我不确定如何使用 urlopen 做到这一点,因为直接打开此 url 只会检查用户是否已被邀请,如 API 页面所述:

您可以通过向 /EVENT_ID/invited/USER_ID 发出 HTTP GET 来检查特定用户是否已被邀请参加活动:

欣赏输入。

4

4 回答 4

37

听起来您想发送一个空的 POST 请求,即使 urllib2.urlopen() 仅在您指定 data 参数时发送一个帖子。

如果您设置 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

于 2012-03-03T00:28:06.420 回答
2

直接来自 Python (urllib2)文档

urllib2.urlopen(url[, data][, timeout]) 打开 URL url,可以是字符串也可以是 Request 对象。警告 HTTPS 请求不会对服务器的证书进行任何验证。 data 可以是一个字符串,指定要发送到服务器的附加数据,或者如果不需要此类数据,则为 None。目前 HTTP 请求是唯一使用数据的请求;当提供数据参数时,HTTP 请求将是 POST 而不是 GET。

于 2013-07-03T15:56:02.267 回答
2

发送空 POST 的另一种方法是创建一个请求并覆盖其 get_method。在这种情况下这是更多的工作,但在其他情况下可能会更干净(例如,如果您已经有一个请求)。

    request = urllib2.Request(url)
    request.get_method = lambda: 'POST'
    urllib2.urlopen(request)

get_method 是一个返回要使用的方法的方法,所以这里我们用一个返回 'POST' 的 lambda 函数覆盖它。

于 2012-08-30T18:48:28.547 回答
0

我想你已经回答了你自己的问题,你只是想多了......

  • 邀请用户使用 urlopen 发布 POST

  • 要检查是否已邀请用户,请使用 urlopen 发出 GET。

在这两种情况下,您都使用相同的 URL 进行通信,区别在于 GET 或 POST。

如果您不确定 GET 和带有 urlopen 的 POST 之间的区别,请阅读此文档:

http://www.doughellmann.com/PyMOTW/urllib2/

于 2012-03-02T23:42:14.733 回答