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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0628
わかば@ライン工したらばへの投稿が上手くいかないので教えて頂けませんか?6解決


わかば@ライン工

リンク

2023/6/28(Wed) 20:00:19|NO.99646

学習目的でしたらば専用のブラウザを作成中なのですが、
過去スレにあったソースを改変してみて、画面には書き込み完了と表示されますが、実際のスレッドには書き込まれていません。
恐らくPOSTするデータの順番や情報が不足しているのだと思い、write.cgiの情報や何をPOSTすればいいか丸二日かけましたが正解に辿り着けませんでした。
掲示板は自分で練習用にレンタルしたものなのです。
ご存じの方見えましたらご教示下さい。
よろしくお願い致します。

#include "hspinet.as"
#include "hspsock.as" #uselib "crtdll.dll" #func time "time" sptr URL = "https://jbbs.shitaraba.net/bbs/read.cgi/netgame/15341/1687948940/" //書き込むスレッドのURL NAME = "" //書き込み時の名前 MAIL = "sage" //書き込み時のメール欄 MESSAGE = "test" //書き込み時の本文 split URL,"/",garbage,garbage,host,garbage,garbage,CATEGORY,BBS_NUMBER,THREAD_NUMBER,garbage title "書き込み開始" sockopen 0,host,80 if stat : title "Sockopen ERROR STAT="+stat : stop //ソケットを開く time(varptr(UnixTime)) ;UNIX時間を取得します prm = "DIR="+CATEGORY+"&BBS="+BBS_NUMBER+"&TIME="+UnixTime+"&NAME="+NAME+"&MAIL="+MAIL+"&MESSAGE="+MESSAGE+"&KEY="+THREAD_NUMBER+"&submit=%8F%91%82%AB%8D%9E%82%D" sendm = "POST /bbs/write.cgi/ HTTP/1.1\nHost: jbbs.livedoor.jp\nContent-Type: application/x-www-form-urlencoded\nAccept: */*\nReferer: "+URL+"\nAccept-Language: ja\nUser-Agent: JaneStyle/3.74\nConnection: close\nContent-Length: "+strlen(prm)+"\n\n" + prm mes "■送信内容" ;表示処理 mesbox sendm,640,213 ;表示処理 sockput sendm,0 if stat : title "Sockput ERROR STAT=" : stop title "データ送信完了...応答待ち中" //POSTでデータを送信します buf="":a="" b=0:sz=0 repeat await 0 sockget a,64 if stat : title "Sockget ERROR STAT=" : stop b=peek(a,0):if b=0 : break buf+=a sz+=64:title "recieve "+sz if sz>30000 : title "サイズオーバー" : stop loop //応答待ち mes "\n■受信内容" ;表示処理 mesbox buf,640,213 ;表示処理 notesel buf nkfcnv buf,buf,"s" if ( instr(buf,0,"<title>ERROR!!</title>") != -1 ) : title "書き込みエラー" : else : title "書き込み完了" notesave "log.txt" sockclose 0 stop ;受信完了したらプログラムを停止



この記事に返信する


nennneko5787

リンク

2023/6/28(Wed) 20:58:06|NO.99647


sendm = "POST /bbs/write.cgi/ HTTP/1.1\nHost: jbbs.livedoor.jp\n


jbbs.livedoor.jp


"+host+"
に変えたら行けると思います。
しかし、したらば掲示板で使っている文字コードがShift-JISではないようですので、
https://wiki.hsp.moe/Module%EF%BC%8FSJIS%E2%87%94UTF8%E7%9B%B8%E4%BA%92%E5%A4%89%E6%8F%9B%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB.html
こちらを使ってみてください。



わかば@ライン工

リンク

2023/6/28(Wed) 22:18:23|NO.99649

返信ありがとうございます。
NAMEとMAILとMESSAGEをShift-jisに変換しようと思い


#include "utf8conv.as"してから

こんな風に書いてみたのですが、文法エラーや、画面がフリーズしたりして
色々試行錯誤でやっております。
関数の書き方が間違っているか、もしかしたら初歩的な事かもしれません。
できるまで続けてみようと思いますが、何かアドバイスがあればよろしくお願いします。

var NAME = utf8n2sjis(to_str("あいうえお"))



名無し

リンク

2023/6/28(Wed) 23:11:10|NO.99650

確認してみたのですが、掲示板側の文字コードはUTF8では無く、EUC-JPですね。
headの中、metaタグで一番最初に指定されてます。ので、
>>99647で紹介されているモジュールは使用しても意味が無いような気がします。
utf8とshift-jisの相互変換のみ対応みたいなので。
文字化けしないためには上記の通りEUC-JPに変換する必要があるので、
使用するなら↓かな?と。
https://wiki.hsp.moe/Module/文字コード変換モジュール.html



リンク

2023/6/29(Thu) 07:22:28|NO.99651

こんにちは。

かなりがっつり書き換えてしまいましたが、こんな感じでどうでしょうか。
一応書き込めることは確認しています。
変更点としては、名前やメールアドレス、メッセージをnkfcnvでEUC-JPにエンコードしているのと、送信部分をhspinetのみで行っています。
hspinetで送信した方が楽だったのと、自分自身がhspsockの使い方がよくわかっていなかったので。
以下、ソースになります。


#include "hspinet.as" #uselib "crtdll.dll" #func time "time" sptr netinit if stat : dialog "ネット接続できません。" : end URL = "https://jbbs.shitaraba.net/bbs/read.cgi/netgame/15341/1687948940/" //書き込むスレッドのURL NAME = "" //書き込み時の名前 MAIL = "sage" //書き込み時のメール欄 MESSAGE = "HSPからの投稿テストです。" //書き込み時の本文 name_encoded = "" //エンコード済みの名前 mail_encoded = "" //エンコード済みのメール message_encoded = "" //エンコード済みのメッセージ nkfcnv name_encoded, NAME, "eS" nkfcnv mail_encoded, MAIL, "eS" nkfcnv message_encoded, MESSAGE, "eS" split URL,"/",garbage,garbage,host,garbage,garbage,CATEGORY,BBS_NUMBER,THREAD_NUMBER,garbage title "書き込み開始" neturl strf("https://%s/bbs/write.cgi/%s/%s/", HOST, CATEGORY, BBS_NUMBER) time(varptr(UnixTime)) ;UNIX時間を取得します prm = strf("DIR=%s&BBS=%s&TIME=%d&NAME=%s&MAIL=%s&MESSAGE=%s&KEY=%s", CATEGORY, BBS_NUMBER, UnixTime, name_encoded, mail_encoded, message_encoded, THREAD_NUMBER) netheader "Referer: "+URL+"\nUser-Agent: JaneStyle/3.74" netrequest_post THREAD_NUMBER+"/", prm title "送信中" *main //結果待ちのためのループ netexec res if res > 0 : goto *finished if res < 0 : goto *error await 1 goto *main *error //エラー title "送信失敗" neterror estr dialog "送信エラー:"+estr stop *finished title "送信完了" netgetv res nkfcnv buf, res, "Lws" //HSPの形式に変換 notesel buf if ( instr(buf,0,"<title>ERROR!!</title>") != -1 ) : title "書き込みエラー" : else : title "書き込み完了" mes "\n■受信内容" ;表示処理 mesbox buf,640,213 ;表示処理 notesave "log.txt" stop ;受信完了したらプログラムを停止



nennneko5787

リンク

2023/6/29(Thu) 17:49:08|NO.99652

すみません、文字コードをよく見ていませんでした。



わかば@ライン工

リンク

2023/6/29(Thu) 19:07:30|NO.99653

お疲れ様です。
名無しさんに教えて頂いたモジュールで文字コードを変換するコードを今日の夜に書こうと思っていたところ
陸さんの書き換えて下さったコードを実行したところ、サックリ動いたので使わせて頂こうと思います。
みなさん、ありがとうございます。
専用ブラウザを開発して色々なOSで動かしたいと考えておりまして、完成したらRaspberry piに移植する予定でいます。
またお世話になると思いますが、よろしくお願い致します。



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