Help us understand the problem. What is going on with this article?

Pythonでのget,post通信メモ

More than 3 years have passed since last update.

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

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away