นี่คือ cgi.serviceporgram ง่าย ๆ ของฉันสำหรับแพลตฟอร์มโปรดของฉัน IBMI
servieprogram นี้จัดการกับสตรีมขาเข้าและขาออกไปยัง std-io
คัดลอก SourceFiles และรวบรวมในห้องสมุดของคุณเอง
เริ่มต้นผู้ดูแลระบบเซิร์ฟเวอร์: STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
สร้างอินสแตนซ์ HTTP-Server ใหม่
เพิ่มส่วนต่อไปนี้ลงใน http-config
ScriptAliasMatch /targetlib/(.*) /qsys.lib/targetlib.lib/$1
รับรองความถูกต้องกับ IBMI - UserProfiles:
<Directory /qsys.lib/targetlib.lib>
SetEnv QIBM_CGI_LIBRARY_LIST "targetlib;YAJL;QHTTPSVR"
AuthType Basic
AuthName "Restricted Area"
PasswdFile %%SYSTEM%%
UserID %%CLIENT%%
Require valid-user
</Directory>
หรือไม่มี IBMI UserProfile พร้อมรายการตรวจสอบความถูกต้อง:
สร้างรายการตรวจสอบความถูกต้องใน IBMI ของคุณด้วย: CRTVLDL TARGETLIB/TEST
เปลี่ยน HTTP-CONF เป็นสิ่งต่อไปนี้:
<Directory /qsys.lib/targetlib.lib>
SetEnv QIBM_CGI_LIBRARY_LIST "targetlib;YAJL;QHTTPSVR"
AuthType Basic
AuthName "Restricted Area"
PasswdFile targetlib/test
Require valid-user
</Directory>
เพิ่มผู้ใช้ที่ได้รับอนุญาตด้วย HTTP-Admin "Advanced"-"Internet-user"
เริ่มต้น HTTP-Server ใหม่ของคุณ
ลองใช้ตัวอย่างที่ส่งมอบ:
ข้อมูลผู้ใช้
https://yourIP:port/targetlib/userinfos?usrcls=secofr&exppwd=1&enabled=0
งานที่ใช้งานอยู่:
https://yourIP:port/targetlib/activejobs?sbs=qbatch&jobsts=msgw
ล็อควัตถุ:
https://yourIP:port/targetlib/objectlocks?lib=testlib&obj=customers
บันทึกประวัติ Infos:
https://yourIP:port/targetlib/historylogs?start=2021-07-11&end=2021-07-12&query=brc
บันทึกงาน Infos:
https://yourIP:port/targetlib/joblogs?job=067435/QUSER/QZDASOINIT&limit=20
Infos สถิติวัตถุ:
https://yourIP:port/targetlib/objectinfos?lib=yajl&objtype=*file
หรือลองใช้กับแอป Windows ขนาดเล็กของฉันที่เขียนใน vb.net:
https://github.com/pantalonorange/control-for-ibm-i
Gethttpinput: อ่านสตรีมและเติมในตัวแปร neccessary เช่น "request_method" และอื่น ๆ
ค่าเหล่านี้เขียนไปยังตัวแปร "InputParmds"
writehttpout: ที่นี่เราสามารถเขียนถึง io-std
gethttpheader: ขั้นตอนง่าย ๆ ในการกำหนดส่วนหัว HTTP
getValueByName รับค่าตามชื่อจากพารามิเตอร์
VTranslatedata: แปลงข้อมูลระหว่าง CCSID ที่แตกต่างกัน
ICONV ใช้สำหรับการแปล
Squissionerystring: "query_string" ถูกแยกวิเคราะห์ที่นี่
"id = 1 & test = 5" กลายเป็น ds [id = 1], [test = 2]
SeperateValues: ข้อมูลที่แยกวิเคราะห์จาก "Squissionerystring" นั้นง่ายขึ้นที่นี่ยิ่งไปกว่านั้น
"id = 1" หรือ "ทดสอบ = 5" กลายเป็น ds [{id} {1}] หรือ [{test} {5}]