mod_sed - apache + sed - ปัญหาของแบ็กสแลช


3

ฉันเพิ่งเริ่มใช้ sed และมีปัญหาเมื่อใช้ sed จาก Apache mod_seq ภารกิจคือเปลี่ยนโพสต์บริการเว็บเป็นโพสต์อัพโหลดไฟล์ Content-Type มีการเปลี่ยนแปลงโดยใช้ mod_headers และงานที่นี่คือการเปลี่ยนเนื้อหาของคำขอ

คำขอร่างกาย:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://tracx.de/pkp/interfaces/msg/1.0" xmlns:ns1="http://tracx.de/pkp/interfaces/core/1.0"><soapenv:Header/><soapenv:Body><ns:test>Hello World</ns:test></soapenv:Body></soapenv:Envelope>



1) ทดสอบ ok ด้วย sed จากพรอมต์คำสั่ง:

sed "s/^.*$/--AaB03x\nContent-disposition: form-data; name=\"xmlfile\"; filename=\"myfile.xml\"\nContent-Type: text\/xml\n\n&\n--AaB03x--\n/" request.xml

ผลผลิตตามที่คาดไว้กับการขึ้นบรรทัดใหม่:

--AaB03x
Content-disposition: form-data; name="xmlfile"; filename="myfile.xml"
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://tracx.de/pkp/interfaces/msg/1.0" xmlns:ns1="http://tracx.de/pkp/interfaces/core/1.0"><soapenv:Header/><soapenv:Body><ns:test>Hello World</ns:test></soapenv:Body></soapenv:Envelope>
--AaB03x--


2) การโทรด้วย Apache mod_sed:

InputSed "s/^.*$/--AaB03x\nContent-disposition: form-data; name=\"xmlfile\"; filename=\"myfile.xml\"\nContent-Type: text\/xml\n\n&\n--AaB03x--\n/"

ส่งออกจาก mod_sed เมื่อคำขอเข้าสู่เว็บแอปของฉัน หมายเหตุ "n" แทนการขึ้นบรรทัดใหม่

--AaB03xnContent-disposition: form-data; name="xmlfile"; filename="myfile.xml"nContent-Type: text/xmlnn<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://tracx.de/pkp/interfaces/msg/1.0" xmlns:ns1="http://tracx.de/pkp/interfaces/core/1.0"><soapenv:Header/><soapenv:Body><ns:test>monday</ns:test></soapenv:Body></soapenv:Envelope>n--AaB03x--n


ฉันได้ลองด้วยคำสั่ง '' และ "" i InputSed แล้ว และลองด้วย backspaces 1, 2, 3 และ 4 หน้าตัวละครควบคุมของฉัน (\ r และ \ n) ดูเหมือนว่า Apache หรือ mod_sed กำลังละเว้นอักขระเครื่องหมายทับขวา

ใครที่รู้ว่ามีปัญหาพิเศษกับ mod_sed และ backslash บ้าง


ฉันกำลังประสบปัญหานี้เช่นกัน คุณสามารถหาวิธีแก้ปัญหาได้หรือไม่?
aleho

คำตอบ:


2

วิธีแก้ปัญหาที่น่าเกลียดทดสอบบน Ubuntu Apache / 2.4.18 โดยใช้เซ็ตย่อยของ sed

$ cat tmp
line3
$ sed "h;s/.*/line1/;p;s/.*/line2/;G;p;s/.*/line4/" tmp
line1
line2
line3
line4
$ cat week
sunday
wednesday
friday
$ sed "2{h;s/.*/monday/;p;s/.*/tuesday/;G;p;s/.*/thursday/;n;p;s/.*/saturday/;}" week
sunday
monday
tuesday
wednesday
thursday
friday
saturday
these work too as \n is still recognised in search string
"G;H;g;s/\n/line1&line2&/;s/\n$/&line4/"
"2{G;H;g;s/\n/monday&tuesday&/;s/\n$/&thursday/;n;p;s/.*/saturday/;}"
$ #sudo a2enmod sed
$ #apache2.conf
<Location /txt/>
    AddOutputFilter Sed txt
    OutputSed "G;H;g;s/\n/line1&line2&/;s/\n$/&line4/"
</Location>
$ service apache2 reload
$ wget localhost/txt/tmp.txt -qO -
line1
line2
line3
line4
$ #sudo a2enmod ext_filter
$ #apache2.conf
ExtFilterDefine external_sed mode=output intype=text/plain cmd="/bin/sed :0;N;$!b0;s/\\n//g"
<Location /txt/>
    SetOutputFilter external_sed
</Location>
$ service apache2 reload
$ wget localhost/txt/week.txt -qO -
sundaywednesdayfriday

ดูสิ่งนี้ด้วย: # 1 , # 2


ลำดับ escape, ผนวก, แทรก, แลกเปลี่ยนคือ (ดูเหมือน) ทั้งหมดที่ไม่รู้จักโดย apache mod_sed
guest-vm

ใช่ - จริง ๆ แล้วฉันต้องการลบ \ n ทั้งหมดในเนื้อหาคำขอ แต่ฉันไม่สามารถทำได้เพราะเพียงแค่แทนที่ "n" (ลบแบ็กสแลช) หรือ "\\ n" (- & gt; แทนที่อะไรเลยเพราะต้องการ sed \ n)
aleho

ฉันตรวจสอบแล้ว - มันเป็นปัญหาเดียวกัน แม้แต่ปัญหาเดียวกันกับไฟล์ตัวกรองภายนอก (-f) สำหรับ sed
aleho

นั่นทำให้งง ฉันทดสอบแล้วและลองคำตอบก่อนโพสต์ คุณควรโพสต์รหัสผิด ๆ & amp; การตั้งค่าในคำถามใหม่
guest-vm

0

หากคุณต้องการแทนที่ข้อความบรรทัดเดียวด้วยข้อความหลายบรรทัดคุณสามารถลองตอบคำถามได้ ที่นี่ .

ฉันไม่มีประสบการณ์กับ mod_sed แต่เป็น คุณหมอ สหรัฐฯ:

mod_sed สามารถใช้เป็นตัวกรองอินพุตหรือเอาต์พุต mod_sed เป็นเนื้อหา   ตัวกรองซึ่งหมายความว่าไม่สามารถใช้ในการปรับเปลี่ยนไคลเอนต์หรือเซิร์ฟเวอร์   ส่วนหัว http

mod_headers อาจเหมาะสมกว่าสำหรับสิ่งที่คุณต้องการทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.