sample.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. --[[
  2. willSendRequestToBbsCgi 関数
  3. 5ch/bbspinkのbbs.cgiにPOSTリクエストが送られる直前にproxy2chから呼び出される
  4. 関数です。引数requestと同じ構造のtable型の変数を返すことで、proxy2chがbbs.cgi
  5. に対して送るリクエストヘッダ/ボディを自由に改変 (ヘッダの追加/削除含む) する
  6. ことができます。--bbscgi-headerオプションとは異なり、板ごとに動作を変更する
  7. ことも可能です。スクリプトは毎回読み込まれるため、proxy2chを起動し直さなくて
  8. も変更は反映されます。
  9. * 引数 request
  10. 次のような構造を持つtable型の変数です。送信される予定のリクエストヘッダ/
  11. ボディが格納されています。
  12. {
  13. "body" = "リクエストボディ",
  14. "headers" = {
  15. "リクエストヘッダ1" = "値1",
  16. "リクエストヘッダ2" = "値2",
  17. :
  18. }
  19. }
  20. この引数をそのまま返せば「何もしない」関数になります。
  21. 特定のヘッダを送信したくない場合は値をnilに設定して削除するか、あるいは空の
  22. 文字列""を代入します。ただし注意としてlibcurlはAcceptヘッダが存在しない場合
  23. はデフォルトの値 ("*/*") を送信するという挙動をするため、nilよりは空文字列
  24. を明示的に代入したほうが安全でしょう。
  25. * 引数 host
  26. リクエスト先のホスト名が格納されているstring型の変数です。
  27. * 引数 board
  28. リクエストボディのbbsフィールドの値に相当するstring型の変数です。
  29. * 引数 thread
  30. リクエストボディのkeyフィールドの値に相当するstring型の変数です。
  31. * 戻り値
  32. 引数requestと同じ構造を持つtable型の変数を返してください。requestそのもの
  33. を改変してもいいですし、新しいtableを1から作ってもいいです。
  34. リクエストボディを改変する場合、application/x-www-form-urlencodedの形式を
  35. 満たしている必要があります。
  36. このスクリプトの中からはproxy2chというグローバル変数を参照可能であり、いくつかの
  37. ユーティリティ関数や変数が proxy2ch.(関数名/変数名) の形でアクセスできます。
  38. proxy2ch.hmacSHA256(key, message) 関数
  39. HMAC-SHA256に基づいてメッセージダイジェストを算出します。
  40. * 引数 key
  41. HMAC算出用の鍵をstring型で渡します。
  42. * 引数 message
  43. ダイジェストを算出したいメッセージをstring型で渡します。
  44. * 戻り値
  45. 算出したメッセージダイジェストの値をstring型で返します。
  46. hex表記したもの、つまり0-9,a-fで構成される長さ64の文字列になります。
  47. proxy2ch.decodeURIComponent(input [, decodePlus]) 関数
  48. URLエンコードされた文字列をデコードします。
  49. * 引数 input
  50. デコードしたい文字列をstring型で渡します。
  51. * 引数 decodePlus (省略可能)
  52. input中に現れる"+"を" "に置き換えるかどうかをboolean型で渡します。
  53. application/x-www-form-urlencoded形式を想定しているため、この引数を省略した
  54. 場合はtrueが渡されたものとして動作します。
  55. * 戻り値
  56. デコード済み文字列をstring型で返します。
  57. proxy2ch.monaKey string型変数
  58. 書き込み時に払い出されたMonaKey(仮称)の値を格納している変数です。
  59. 払い出し前の初期値は便宜上 "00000000-0000-0000-0000-000000000000" です。
  60. ]]
  61. function willSendRequestToBbsCgi(request, host, board, thread)
  62. --リクエストヘッダのUser-Agentの値を変更する
  63. request.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0"
  64. --リクエストヘッダのRefererの値を変更する
  65. request.headers["Referer"] = "https://" .. host .. "/test/read.cgi/" .. board .. "/" .. thread .. "/l50"
  66. --リクエストボディの末尾に"&oekaki_thread1="を追加する
  67. request.body = request.body .. "&oekaki_thread1="
  68. return request
  69. end