ぷろぐら×でざいん

Python3 URLパラメーターを付けてPOSTリクエストする

Python3 URLパラメーターを付けてPOSTリクエストする

Python3 URLパラメーターを付けてPOSTリクエストする

前述

涼しかったり、暑かったり、よくわからない気候が続きますが、皆様如何お過ごしでしょうか。まぁーこれを読む人は暗号通貨関連の記事を読む人と異なると思いますので初めまして。今回は POST リクエストにURLパラメーターを付ける方法を備忘録として書きます。一般的には POST リクエストの場合だとリクエストBodyにパラメーターを入れるものだと思うのですが、まぁーAPIの仕様上仕方ないことなので従うことにします。


GET リクエストにURLパラメーターを付ける

https://shotanuki.com/?username=ユーザー&password=パスワード
上記のようなURLリクエストを何故かPOSTでしなければならない時ってありますよね?GETリクエストなら普通に下記のようなソースコードで終わりです。正直POSTリクエストもURLを文字列結合でやればできなくもないですが、あまりスマートなやり方ではないと個人的には思っています。

import requests
params = {
    'username': 'ユーザー',
    'password': 'パスワード',
}
url = 'URLをかいてね'
headers = {'User-Agent': USER_AGENT}  # 書き換えてね
res = requests.get(url, headers=headers, params=params)
return res.text

POST リクエストにURLパラメーターを付ける

https://shotanuki.com/?username=ユーザー&password=パスワード
しかし、API側がPOSTリクエストを求めているならそれに答えねばならない。だって動かないんですもん。404却ってくるのですもん。

import json
from urllib import request, parse

params = {
    'username': 'ユーザー',
    'password': 'パスワード',
}

url = 'URLをかいてね'
data = parse.urlencode(params).encode() 
req = request.Request(url, data=data)
res = request.urlopen(req)

encoding = res.info().get_content_charset('utf8')
return json.loads(res.read().decode(encoding))

レスポンスがByte文字列で却ってくるので、上記の記述でDictで取得できましたー。


あとがき

最近いろいろなAPIを叩いてデータを取得し、データベースにぶち込んでいるショウタヌキです。暗号通貨関連のプログラミングは一切やっていませんが、いつかはやりたいなーと思ってます。FinTechとか何かかっこいいですよね、響きが。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です