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と書かれています。

HTTP POST を /EVENT_ID/invited/USER_ID に発行することで、ユーザーをイベントに招待できます。

APIページに記載されているように、このURLを直接開くと、ユーザーが招待されているかどうかのみがチェックされるため、urlopenでそれを行う方法がわかりません。

HTTP GET を /EVENT_ID/invited/USER_ID に発行することで、特定のユーザーがイベントに招待されているかどうかを確認できます。

入力に感謝します。

4

4 に答える 4

37

urllib2.urlopen()はデータパラメータを指定した場合にのみPOSTを送信しますが、空のPOSTリクエストを送信したいようです。

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

空のPOSTを送信する別の方法は、リクエストを作成してそのget_methodをオーバーライドすることです。この場合、これはより多くの作業になりますが、他の場合(たとえば、すでにリクエストがある場合)はよりクリーンになる可能性があります。

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

get_methodは、使用するメソッドを返すメソッドであるため、ここでは、「POST」を返すラムダ関数でオーバーライドします。

于 2012-08-30T18:48:28.547 に答える
2

Python (urllib2)ドキュメントから直接

urllib2.urlopen(url[, data][, timeout]) 文字列または Request オブジェクトの URL url を開きます。警告 HTTPS 要求は、サーバーの証明書の検証を行いません。 data は、サーバーに送信する追加データを指定する文字列、またはそのようなデータが必要ない場合は None です。現在、データを使用するのは HTTP リクエストのみです。data パラメーターが指定されている場合、HTTP 要求は GET ではなく POST になります。

于 2013-07-03T15:56:02.267 に答える
0

私はあなたがあなた自身の質問にほとんど答えたと思います、あなたはそれをただ考えすぎています...

  • ユーザーを招待するには、urlopenを使用してPOSTを発行します

  • ユーザーが招待されているかどうかを確認するには、urlopenを使用してGETを発行します。

どちらの場合も、同じURLで通信していますが、違いはGETまたはPOSTです。

getとurlopenを使用したPOSTの違いがわからない場合は、次のドキュメントをお読みください。

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

于 2012-03-02T23:42:14.733 に答える