Amazonの MWSやYahoo APIなど、WebAPIを使用して、XMLのレスポンスを取得する場合のエラー処理に関する問題です。
エラーが発生した場合、エラー内容の詳細がわからないのです。
今回は、WebRequest.GetResponseでエラーが発生した場合、エラー内容の詳細を確認する方法を紹介します。
例えば、Yahoo APIで有効期限が切れているアクセストークンでリクエストを送信してみます。
ブラウザの場合、次のように画面に表示されます。
<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の中身は以下のようになっています。
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の中身を確認すれば良いことがわかりました。