質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

4回答

5338閲覧

WebAPI呼出ができない(Not found、チャネル サポートエラー)

ladybird

総合スコア163

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/09/05 06:42

編集2018/09/07 03:26

ExcelVBAからWebAPIを呼び出そうとしているのですが、
エラーが出て先に進めません。

まず最初はこちらの記事を参考に下記のようなコードを実行しましたが、
404:NotFoundになってしまいました。
(もちろんURLとパラメータの形式はよくよく確かめましたので合っているはずです)

VBA

1Public Function KickAPI( _ 2 ByVal request As String, _ 3 ByVal URL As String, _ 4 ByVal param As Object) As Object 5 6 Dim fso As Object 7 Set fso = CreateObject("MSXML2.XMLHTTP") 8 With fso 9 .Open request, URL, False 10 .setRequestHeader "Content-Type", "text/csv" 11 .send (ConvertToQueryString(param)) 12 End With 13 14 Set KickAPI = fso 15End Function 16 17Private Function ConvertToQueryString(ByVal dic As Object) As String 18 19 If dic Is Nothing Then Exit Function 20 Dim key As Variant 21 For Each key In dic.keys 22 If ConvertToQueryString = "" Then 23 ConvertToQueryString = key & "=" & dic.Item(key) 24 Else 25 ConvertToQueryString = ConvertToQueryString & "&" & key & "=" & dic.Item(key) 26 End If 27 Next 28 29End Function

「MSXML2.XMLHTTP Not found」で検索してみると
「MSXML2.XMLHTTPではなくMSXML2.ServerXMLHTTPを使うべき」と言われていたので変えてみたところ、今度は「セキュリティで保護されたチャネル サポートでエラーが発生しました」というエラーになりました。

このエラーを調べるとインターネットオプションの変更が必要とありましたので確認しましたが、最初からリンク先の通りになっていました。
ためしに逆(SSLをオン)にしてみてもだめでした。

何か他に試すべきことがありましたらご教授ねがいます。


9/7 追記
APIの仕様をよくよく確認すると、
404は利用IDが無効な場合に返されるとありました。え、ええー・・・
とはいえブラウザから呼び出すと正常にレスポンスが返ってくるのでIDの問題ではなさそうです。
現在APIの作成元に問い合わせ中です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

正式な情報が見つからず理由はいまいち分かっていないのですが、
パラメータをsendではなくOpenのURLに含めて送信したらレスポンスが取得できました。
皆様ありがとうございました。

VBA

1 Dim fso As Object 2 Set fso = CreateObject("MSXML2.XMLHTTP") 3 With fso 4 .Open request, URL & "?" & ConvertToQueryString(param), False 5 .setRequestHeader "Content-Type", "text/csv" 6 .send 7 End With

投稿2018/09/19 08:36

ladybird

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

.send (ConvertToQueryString(param))

ですが、文字列の後ろに改行(VbCrLf)は不要でしょうか?

.send (ConvertToQueryString(param) & VbCrLf)

当方では、ここに改行がないとエラーになります。

投稿2018/09/06 06:43

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ladybird

2018/09/06 07:04 編集

ご指摘の通り追加してみましたが変化なしでした; 改行ないとエラーになるって奇怪ですね。。 ご回答ありがとうございます!
h.horikoshi

2018/09/07 01:39

#書き込んだあとで気がつきましたが、404:NOTFoundが返るということは、リクエストは出せているんですね、失礼しました。 もう試されているかもしれませんが… こういう場合に私がよくやるのは、ネットワーク解析ツール(たとえば WireShark)を使って実際に流れているPOST/GETのリクエストを確認 するという方法です。 もし、プログラムがWebページのUI操作をシミュレートするものである なら、手操作で操作した場合とプログラムから投げた場合の両方を比較 すれば違いがわかるかと思います。
guest

0

あっ!失礼致しました。
代わりに整数の「13056」に置き換えて見てください。

下記は、参考URLです。
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms753798(v=vs.85)

投稿2018/09/05 07:36

paolo.ahn

総合スコア73

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SSL証明書の問題ではありませんか?次の2ヶ所を修正して見てください。

Set fso = CreateObject("MSXML2.ServerXMLHTTP") # 変更行 With fso .Open request, URL, False .setOption 2, .getOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS # 追加行 .setRequestHeader "Content-Type", "text/csv" .send (ConvertToQueryString(param)) End With

投稿2018/09/05 06:57

paolo.ahn

総合スコア73

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ladybird

2018/09/05 07:26

ご回答ありがとうございます! 試してみましたが、SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORSが未定義と言われてしまいます。。 参照設定か何かが必要なのでしょうか
ladybird

2018/09/05 07:31

↑参照設定でMicrosoft XMl v.6.0を追加したら未定義エラーは消えました。 が、やはりsendで「セキュリティで保護されたチャンネル サポートでエラーが発生しました」になってしまいます。。
paolo.ahn

2018/09/05 07:40

証明書の問題ではない可能性もありますので、参考URLから実際のエラーを特定するか、 KickAPI関数の中に次の構文を追記してエラーを回避してみたらどうですか? On Error Resume Next
ladybird

2018/09/06 07:06 編集

Resume Nextすればsendではエラーになりませんが、肝心のレスポンスが取得できないので、その先で困りますね~ >参考URLから実際のエラーを特定する について、どのような方法を想定されているのか伺えますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問