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

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

IT Tips Web API Yahoo!ショッピングWeb API

VB.netでPOSTするときにエラー内容のレスポンスが取得できない問題の解決法

投稿日:

VB.netでWebClientやHTTPWebRequestを使って、POSTする場合、400や401など4で始まるエラーが発生するとレスポンスの内容が取得できません。

スポンサーリンク

単純にURLにパラメータをつけてPOSTするだけの場合は、多分大丈夫です。
WebClientの場合は、Byte配列を使って、UploadValuesを使った場合に発生します。
(例:VB.netでヤフーショッピングのストアカテゴリ編集APIを使う方法

HTTPWebRequestの場合は、ContentLengthにデータを乗せて、レスポンスを取得する場合に発生する問題です。

これは、Try~CatchでWebExceptionを補足し、WebExceptionのレスポンスを読み取ることで問題が解決します。
「VB.netでヤフーショッピングのストアカテゴリ編集APIを使う方法」の場合、

                objWC = New System.Net.WebClient()
                'PUTで送信します。
                byResult = objWC.UploadValues(sURL, "POST", objPostData)
                '結果はXML形式で渡されます。
                sRtn = System.Text.Encoding.UTF8.GetString(byResult)

の部分を、次のように書き換えます。

            Try

                objWC = New System.Net.WebClient()
                'PUTで送信します。
                byResult = objWC.UploadValues(sURL, "POST", objPostData)
                '結果はXML形式で渡されます。
                sRtn = System.Text.Encoding.UTF8.GetString(byResult)

            Catch ex As WebException

                Dim objEncError As Encoding = Encoding.UTF8
                'MessageBox.Show(ex.Response.Headers.ToString)
                Dim resError As WebResponse = ex.Response
                Dim resStreamError As Stream = resError.GetResponseStream()
                Dim srError As StreamReader = New StreamReader(resStreamError, objEncError)
                Dim htmlError As String = srError.ReadToEnd()
                srError.Close()
                resStreamError.Close()

            End Try

すると、htmlErrorの内容は、次のようになりました。

<?xml version="1.0" encoding="UTF-8" ?>
<Error>
<Message><![CDATA[同じカテゴリ階層に同名のストアカテゴリ名が存在します。]]></Message>
<Detail></Detail>
<Code>sc-01005</Code>
</Error>

-IT, Tips, Web API, Yahoo!ショッピングWeb API

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