ฉันใช้ CURL เพื่อสร้างคำขอหลายพันรายการ ในโค้ดของฉัน ฉันตั้งค่าคุกกี้เป็นค่าเฉพาะ จากนั้นจึงอ่านค่าบนหน้าเว็บ นี่คือโค้ด Perl ของฉัน:
#!/usr/bin/perl
my $site = "http://SITENAME/?id=";
my $cookie_name = "cookienum123";
print $fh "#\t\tValue\n";
for my $i ('1'..'10000') {
my $output = `curl -s -H "Cookie: $cookie_name=$i" -L $site$i | grep -Eo "[0-9]+"`;
print "$i\t\t$output\n";
}
ดังนั้นตั้งแต่ 1 ถึง 10,000 ฉันกำลังตั้งค่า cookienum123 เป็นค่านั้นและอ่านการตอบกลับทั้งหมดจากหน้าเว็บ จากนั้นฉันใช้ grep เพื่อแยก # ตอนนี้รหัสที่ฉันใช้งานได้ดี แต่ฉันสงสัยว่ามีวิธีที่เร็วกว่าหรือมีประสิทธิภาพมากกว่านี้ที่ฉันสามารถทำได้หรือไม่
โปรดทราบว่าสิ่งนี้ไม่จำเป็นต้องทำในรูปแบบสคริปต์ Perl (ฉันยังสามารถใช้ไฟล์แบตช์ Windows, เชลล์สคริปต์ Unix ฯลฯ )
แก้ไข 18 ม.ค. : เพิ่มเงินรางวัลพร้อมหมายเหตุ "คำตอบที่ต้องการควรรวมวิธีใน Perl เพื่อเรียกใช้คำขอ curl หลายพันคำขอพร้อมกัน แต่จะต้องรันเร็วกว่าอัตราที่กำลังทำงานอยู่ โดยจะต้องเขียนเอาต์พุตไปที่ สุดท้ายไฟล์เดียวแต่ลำดับไม่สำคัญ" ความคิดเห็นด้านล่างบางส่วนกล่าวถึง fork แต่ฉันไม่แน่ใจว่าจะนำไปใช้กับโค้ดของฉันได้อย่างไร ฉันยังใหม่มากกับ Perl เนื่องจากนี่เป็นโปรแกรมแรกของฉัน
curl
หลายกระบวนการด้วย - person ikegami   schedule 16.01.2015:)
- person mpapec   schedule 16.01.2015curl
เนื่องจากคุณจะต้องแน่ใจว่ามีการรันcurl
ครั้งละหนึ่งรายการเท่านั้น หากคุณใช้ Net::Curl::Multi คุณจะต้องล็อคไฟล์เมื่อคุณเขียนมันเท่านั้นเพื่อที่จะสามารถทำงานได้ แต่ผลลัพธ์จะอยู่ในลำดับแบบสุ่ม ด้วยเหตุนี้ คุณจึงต้องการเก็บเอาต์พุตไว้ในหน่วยความจำ ในฐานข้อมูล หรือในไฟล์แยกกัน จากนั้นจึงประกอบเอาต์พุตอีกครั้งในตอนท้าย - person ikegami   schedule 16.01.2015