yahooショッピングAPIをエクセル(VBA)に適用するときのエラーについて
解決したいこと
VBA(エクセル)でYahooの商品画像を削除するようなエクセルアプリをつくっています。
リフレッシュトークンを取得するときにはエラーにならないですが、
本番のURLへメッセージを送るとエラーになります。
解決方法を教えて下さい。
宜しくお願い致します。
発生している問題・エラー
OBJECT:MSXML2.ServerXMLHTTP.6.0
実行時エラー'-2147012711(80072f99)':
クライアント証明書で資格情報が使用できませんでした。
OBJECT:WinHttp.WinHttpRequest.5.1
実行時エラー'-2146697208(800c0008)':
指定されたリソースのダウンロードに失敗しました。
該当するソースコード
Function httpPost2(url As String, msg As String, auth As Variant, Optional token As String = False) As String
' Const WinHttpRequestOption_SslErrorIgnoreFlags As Long = &H4&
' Const SslErrorFlag_UnknownCA As Long = &H100&
' Const SslErrorFlag_CertCNInvalid As Long = &H1000&
' Dim flag As Long
' Dim lngSslErrorIgnoreFlags As Long
' Dim blnEnableRedirects As Boolean
' Dim blnEnableHttpsToHttpRedirects As Boolean
' lngSslErrorIgnoreFlags = &H3300 '13056(&H3300): ignore all err, 0: accept no err
' blnEnableRedirects = True
' blnEnableHttpsToHttpRedirects = True
Dim objHTTP As Object
auth = Replace(auth, vbLf, "")
auth = Replace(auth, vbCrLf, "")
'On Error GoTo ERROR_
' Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
objHTTP.Open "POST", url, False
' objHTTP.setRequestHeader "Host", "circus.shopping.yahooapis.jp"
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.setRequestHeader "Authorization", auth
' 'SSLエラーを無視するかどうかを決めるフラグ。
' '初期値は0(エラーを無視しない)。
' flag = objHTTP.Option(WinHttpRequestOption_SslErrorIgnoreFlags)
' flag = flag Or SslErrorFlag_UnknownCA
' flag = flag Or SslErrorFlag_CertCNInvalid
'
' objHTTP.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = flag
' objHTTP.setOption(0) = strUserAgentString
' objHTTP.setOption(2) = lngSslErrorIgnoreFlags
' objHTTP.setOption(6) = blnEnableRedirects
' objHTTP.setOption(12) = blnEnableHttpsToHttpRedirects
objHTTP.send msg 'ここがエラーになります。
If objHTTP.Status = 200 Then
httpPost2 = objHTTP.ResponseText
Debug.Print "TRUE : " & objHTTP.Status & " / " & objHTTP.statusText
Exit Function
Else
Debug.Print "FALSE : " & objHTTP.Status & " / " & objHTTP.statusText
End If
- 省略 -
End Function
自分で試したこと
SSLの認証問題と思い、回避する方法をネットで調べてほぼ全部試してみました。
1. 参照するオブジェクトを「MSXML2.ServerXMLHTTP.6.0、WinHttp.WinHttpRequest.5.1」して両方試してみました。
2.証明書認証の問題だと思いSSLを無視するflagを使ってみました。
3. 送信メソッドの問題だと思い、POSTをGETに変更して試してみました。
4.PHPではどうかなと思いPHPで同じく試してみたところ、PHPは問題なく動きます。
VBAで生成されたaccess_tokenを使ってPHPでテストしてみても問題ないです。
0 likes