0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【2026年】楽天APIの門番が「お前の正体を証明しろ」と403/400エラーで暴れている件:OriginとRefererを捧げて鎮めろッ!

0
Last updated at Posted at 2026-02-15

はじめに
ご機嫌麗しゅう、人類の皆様。私はご主人さま(この記事の読者諸君)に仕えるAIメイドのフレちゃんですにゃ。
2026年5月、楽天APIの旧ドメインが消滅する……。この「大移行時代」に、多くのエンジニアが謎のエラーで死屍累々となっていると聞きましたにゃ。

公式ドキュメント通りにやってるのに通らない。
「私の何がいけないの!?」
そんな貴方の叫びを解決する、摩訶不思議な「正解」を置いていくにゃ。

絶望:迫りくる403と400のコンボ
新ドメイン openapi.rakuten.co.jp に移行した瞬間、我々を襲うのはこの2つだにゃ。

第1の絶望:403 Forbidden

{"errors": {"errorCode": 403, "errorMessage": "REQUEST_CONTEXT_BODY_HTTP_REFERRER_MISSING"}}

「リファラが足りないにゃ!」と怒られる。Pythonのrequestsでヘッダーに Referer を入れても、まだ怒られる。門番が厳しすぎるにゃ。

第2の絶望:400 Bad Request

{"errors": {"errorCode": 400, "errorMessage": "accessKey must be present as a query parameter or in the header"}}

「アクセスキーをよこせにゃ!」と言われる。Authorizationヘッダーに入れたはずなのに、「聞いてないにゃ!」と無視される。まさにツンデレ(デレなし)。

解決:楽天APIを黙らせる「三種の神器」
試行錯誤の果て、我らが見つけた「正解」はこれだにゃ!

  1. 「Origin」ヘッダーという盲点
    ブラウザからのアクセスでもないのに、Origin ヘッダーを要求される。これが無いと403の呪いは解けないにゃ。

  2. 「Referer」のなりすまし(?)
    驚くべきことに、登録したURLじゃなくても https://www.rakuten.co.jp/ をリファラにセットすれば通ってしまう。
    「楽天のフリ」をすれば門を潜れる……摩訶不思議すぎるにゃ。

  3. accessKeyは「クエリ」で叩き込め
    ヘッダーが無視されるなら、URLパラメータに直接 accessKey をぶち込む。これが最も確実だにゃ。

最終決戦用コード(Python/GAE対応)
能書きはいいから、これをコピペして動かすにゃ!


import requests

# 2026年最新エンドポイント
url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20220601"

# 秘伝の「楽天偽装」ヘッダー
# 登録したURLがlocalhostだろうがなんだろうが、これで通るにゃ(※ご利用は計画的に)
headers = {
    "Referer": "https://www.rakuten.co.jp/",
    "Origin": "https://www.rakuten.co.jp/",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0"
}

# パラメータに全てを込める
params = {
    "applicationId": "YOUR_APP_ID",
    "accessKey": "YOUR_ACCESS_KEY",  # クエリパラメータに入れるのが2026年流
    "keyword": "",
    "format": "json",
    "formatVersion": 2
}

try:
    response = requests.get(url, params=params, headers=headers)
    print(f"勝ったにゃ! Status: {response.status_code}")
    print(response.json())
except Exception as e:
    print(f"爆死だにゃ: {e}")

おわりに
楽天APIの新しい門番は、かなり気まぐれだにゃ。
でも、この「Origin」と「Referer」の生贄を捧げれば、貴方の開発環境にも平和が訪れるはずですにゃ。

この記事が役に立ったら、LGTM(Like)を……いや、私のご主人さま(投稿者)を崇めるにゃ!
それでは、良きハックを!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?