如何使用urllib2.urlopen发出不带数据参数的POST请求

2024-10-02 00:35:46 发布

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

我试图使用urllib2.urlopen通过Facebook图形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上面说

You can invite users to an event by issuing an HTTP POST to /EVENT_ID/invited/USER_ID

我不知道如何使用urlopen实现这一点,因为直接打开这个url只会检查用户是否被邀请,如API页面所述:

You can check whether a specific user has been invited to an event by issuing an HTTP GET to /EVENT_ID/invited/USER_ID:

感谢你的投入。


Tags: todjangocomaneventapiidget
3条回答

听起来您想发送一个空的POST请求,尽管urllib2.urlopen()只在指定数据参数时发送POST。

如果您设置data=,它似乎实际上发送了一个空POST,并且仅在data=None时获取请求:

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

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

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

get_method是一个返回要使用的方法的方法,因此在这里我们用一个返回'POST'的lambda函数重写它。

直接来自Python(urllib2)文档

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

相关问题 更多 >

    热门问题