HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0501
にゃんちゃんMastodon のAPIをたたく4解決


にゃんちゃん

リンク

2017/5/1(Mon) 15:28:24|NO.79435

こんにちは、お世話になります。
Mastodon のAPIをたたこうとしているのですが、ちょっとよく分からない現象が発生しています。
アプリケーションを登録するURLが、
https://[instance]/api/v1/app
となっており、この場所に必要な情報をPOSTする必要があります。それで、以下のプログラムを書きました。

#include "hspinets.as"//https 対応 netinit neturl "https://mastodon.social/api/v1/" prm="client_name=\"test app\"&redirect_uris=\"urn:ietf:wg:oauth:2.0:oob\"&scopes=\"read write follow\"" netrequest_post "apps",prm a=0 b=0 repeat netexec a if a<0:b=1:break//失敗 if a>0:b=0:break//成功 await 1 loop if b=1:dialog "error":end netgetv data bsave "ret.txt",data,strlen(data) dialog data end
これを実行すると、something went wrong!というhtmlファイルが返却されます。また、このページにFirefoxでアクセスすると、404 not foundとなります。
なのですが、不思議なことに、Ubuntuからcurlしてみると
% curl -X POST -sS https://mastodon.social/api/v1/apps
{"error":"Validation failed: Name can't be blank, Redirect URI can't be blank"}%
となって、JSONが帰ってきています。これは、内部的にはどういう違いがあってこうなっているのでしょうか?できればHSPからやりたいです。
よろしくお願いします。



この記事に返信する


inovia

リンク

2017/5/3(Wed) 22:34:50|NO.79529

これで動くかな?
hspinets側を少し直してみました。
http://hsp.moe/download/hsp35_hspinet_binary.zip



inovia

リンク

2017/5/3(Wed) 22:57:43|NO.79533

>また、このページにFirefoxでアクセスすると、404 not foundとなります。
マストドンのAPIはGETメソッドをサポートしていない様子なので、
ブラウザのアドレスバーに入れたのなら、そうなっても仕方がないような。

>something went wrong!というhtmlファイルが返却されます。
公式のhspinetを使っている場合のみ、これは表示されるはず…。

公式hspinetがHTTPSに未対応なため。
1. HTTPSなリクエストはhspinetではHTTPで"POST"送信されます。
2. HTTPでアクセスされたサーバーが301リダイレクトしてHTTPSのアドレスを返します。
3. hspinetがリダイレクトされたアドレス(HTTPS)へ"GET"送信します。
(リダイレクトされたため、POSTメソッドがGETに変化してしまっている)
4. サーバー側のAPI用サービスがGETをサポートしていないので、404エラーを返す。
みたいなことが起こっているはず。

hspinetsなら表示されないはず。
ただし、昔配布していたhspinetsですと別のエラーが発生するので、
今回それを修正しました。

// 余談
HSP3掲示板のHOME(アドレスを入れるところ)が、
HTTPSなアドレスを入れるとURLが壊れるので直してほしいところ。
あと掲示板自体のHTTPS対応とか。ChromeやFirefoxだと警告出まくりで^^。



にゃんちゃん

リンク

2017/5/4(Thu) 00:04:10|NO.79536

ご回答ありがとうございます。
まだ、修正いただいたhspinetsは動作テストをしていないのですが、直接の原因になっていた箇所を特定したので、とりあえずそのレポートを載せておきます。
同じことを試す方の参考にもなると思いますので、hspinetsで再びテストして、その結果も明日投稿します。
今回の原因ですが、全てのパラメータの前後を""で囲んでいたのがまずかったようです。サーバー側がパースできなかったらしい。httpヘッダーが500番を返していました。
全てのパラメータからコーテーションを取り除くと、httpサーバーからの応答はhttp 200 OKとなりますが、最初に投稿した時のhspinetsでは、結果を正しく取得できず、netexecがエラーの状態でループを抜けています。
通常バージョンのhspinetを使った場合、こちらもブラウザからのGETリクエストと同様に404になるので、inoviaさんの解説してくださったことが実際に起きているんだと思います。そういうリダイレクトが起こることは知らなかったので、勉強になりました。
netexecがエラーを返さなくなるかどうか、明日調べてみます。



にゃんちゃん

リンク

2017/5/4(Thu) 14:54:29|NO.79544

できました!新しいhspinetsを使ったら、問題なく取得することができました。ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.