MAIL

平日9:00〜17:30 お問い合わせ

MENU

ブログ BLOG

2021/6/21 (Mon)

http status code 400(Bad Request)が返信された時のチェックポイント

http status code 400(Bad Request)が返信された時のチェックポイント
Tips

最近、業務で作成したシステムとWebAPIを連携させるテストを行っていますが、 その際に地味につまずいたポイントとその解決方法を、ここで共有しようと思います。

つまずいたこと

複数パラメータ付きのGETリクエストを投げた場合に400エラーが返ってくる

HTTPステータスコード400(Bad Request)は、どのようなエラーかというと、 主にクライアントからのリクエストに問題があり、サーバがリクエストを処理できない場合に、発生するエラーです。
より、具体的に説明すると、400番台のコードに定義されている、どのエラーにも当てはまらない場合に返却されます。
サーバ側の実装次第では、サーバ側の問題である場合もあります。 様々な原因で発生するエラーですが、以下に確認すべきポイントを列挙します。

チェックポイント

    ・ブラウザのキャッシュが破損している
    キャッシュクリアする。
    Chromeの場合 メニュー>設定>自動入力>プライバシーとセキュリティ>閲覧履歴データの削除>キャッシュされた画像とファイル>データを削除

    ・ブラウザのCookieが有効期限切れ、または破損している
    Cookieを削除する。
    Chromeの場合 メニュー>設定>自動入力>プライバシーとセキュリティ>閲覧履歴データの削除>Cookieと他のサイトデータ>データを削除

    ・URLの入力ミス
    正しいURLを入力しているか確認する。

    ・URLの日本語パラメータがエンコードされていない
    サーバが処理できない文字を含んでいる場合、エンコードする。(あ → %E3%81%82)

    ・URLエンコードが正しくない
    あ → %%E3%81%82(余分な%がある)になっているなど、エンコードにミスがないか確認する。

    ・URLに含まれる&がエスケープされていない
    複数パラメータをつけてリクエストする場合、URLに含まれる&をエスケープする。(& → \&)

私の場合、以下のようにcurlコマンドでリクエストした結果、ステータスコード400が返却されてしまいました。

[コマンドライン]
 リクエスト : curl http://www.sun-m.co.jp/sample/xxx?username=Admin&word=xxx
 レスポンス : {
 "timestamp" : "20XX-XX-XX XX:XX:XX",
 "status" : 400,
 "error" : "Bad Request",
 "message" : ""
 "path" : "http://www.sun-m.co.jp/sample/xxx"
 }

まとめ

今回ステータスコード400が返却された原因は、複数パラメータをつなげるための&を、エスケープしていなかったことでした。
下記のように書くことでリクエストに成功しました。
リクエスト:curl http://www.sun-m.co.jp/sample/xxx?username=Admin\&word=xxx

参考にしたブログによると、
複数パラメータを利用している場合URLの&がシェルの&(バックグラウンドプロセス)と競合してしまい、違うコマンドとして認識されてしまう。 とのことです。

以上、http status code 400(Bad Request)が返ってきた場合の対処方法の紹介でした。
最後まで読んでいただきまして、ありがとうございました。

参考

参考サイト:https://hkdnet.hatenablog.com/entry/2015/09/19/133415