57
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Pythonでのget,post通信メモ

Pythonでの通信方法のメモ代わりにまとめます

get通信

サンプルコードはこんな感じ

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib

#送信先URL
url = "http://test.test"
#getパラメータ
param = [
    ( "id", 0),
    ( "param", "dammy"),
]

url += "?{0}".format( urllib.urlencode( param ) )

#API実行
result = None
try :
    result = urllib.urlopen( url ).read()
except ValueError :
    print "アクセスに失敗しました。"

見ればわかるかと思うけども、
urlに送信するurlを
paramにgetパラメータを設定しています。

urllib.urlencode( param )

でurlのパラメータの形に変換しており結果

http://test.test?id=0&param=dammy

こんな感じに変換されます。

post通信

初めはrequestsを使用する予定だったのですが、
うまく動作しなかったので、urllib、urllib2を使用することにしました。

サンプルコード


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import urllib2

url = "http://test.test"
params = {"id":0, "param" : "dammy" }
params = urllib.urlencode(params)

req = urllib2.Request(url)
# ヘッダ設定
req.add_header('test', 'application/x-www-form-urlencoded')
# パラメータ設定
req.add_data(params)


res = urllib2.urlopen(req)
r = res.read()
print r

パラメータを
urllib.urlencode( param )
で変換させるところは変わらないですね。
req.add_header('test', 'application/x-www-form-urlencoded')
req.add_data(params)
でヘッダーとパラメータを設定しています。

ちなみにrequestsで行うとすると以下の様になるようです。
自分の環境ではCakePHPのwebサーバーに送ったのですが、
post通信になりませんでした。

mursts様のご指摘で正常にpost通信ができる様になりました。
ありがとうございます!

post通信をさせる場合は

r = s.post(url, params=params)

部分でdetaに渡さなくてはなりません。
なので上記の部分を以下の通りに修正しました

r = s.post(url, data=params)

重ね重ねになりますが、ご指摘ありがとうございました!

ちなみにparamsの場合はget通信になる様です。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

url = "http://test.test"
s = requests.session()
params = {"id":0, "param" : "dammy" }
r =  s.post(url, data=params)
print r.text.encode("utf-8");

こちらの方が簡単に実装できるので、使えるならこっちの方が
よかったですね。
あ、requestsはインストールする必要があるので使う場合は以下のコマンドで
インストールしてください。
pip install requests

以上です。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
57
Help us understand the problem. What are the problem?