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>
<Error>
<Message><![CDATA[同じカテゴリ階層に同名のストアカテゴリ名が存在します。]]></Message>
<Detail></Detail>
<Code>sc-01005</Code>
</Error>