会社行きたくなかったんです。

自由になりたくて会社辞めました

未分類

WebRequest.GetResponseで401エラー、エラー内容を取得できない

投稿日:

Amazonの MWSやYahoo APIなど、WebAPIを使用して、XMLのレスポンスを取得する場合のエラー処理に関する問題です。
エラーが発生した場合、エラー内容の詳細がわからないのです。

今回は、WebRequest.GetResponseでエラーが発生した場合、エラー内容の詳細を確認する方法を紹介します。

例えば、Yahoo APIで有効期限が切れているアクセストークンでリクエストを送信してみます。

ブラウザの場合、次のように画面に表示されます。

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Message>
Please provide valid credentials. Bearer realm="yahooapis.jp", error="invalid_token", error_description="expired token"
</Message>
</Error>

「expired token」と表示されるので、アクセストークンの有効期限切れによるエラーが発生したことがわかります。

これをVB.netで実行すると、WebRequest.GetResponseでWebExceptionが発生します。

WebException.Messageは、
「リモート サーバーがエラーを返しました: (401) 許可されていません」
となり、何が原因でエラーが発生したのか全くわかりません。

WebException.Response.StatusDescriptionは、「Unauthorized」なので、WebException.Messageと同じ意味です。

ブラウザでは「expired token」と表示されているので、どこかに情報があるはずです。
それは、WebException.Response.Headersに含まれています。

WebException.Response.Headersの中身は以下のようになっています。

{Age: 0
Transfer-Encoding: chunked
Connection: keep-alive
Content-Type: application/xml
Date: Thu, 08 Jun 2017 00:39:08 GMT
Server: Apache
WWW-Authenticate: Bearer realm="yahooapis.jp", error="invalid_token", error_description="expired token"
}

ということで、WebRequest.GetResponseでエラーが発生した場合は、WebException.Response.Headersの中身を確認すれば良いことがわかりました。

-未分類

Copyright© 自由になりたくて会社辞めました , 2018 AllRights Reserved Powered by AFFINGER4.