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>