จะใช้ cURL ใน Java ได้อย่างไร?


92

ฉันเป็นมือใหม่ใน java และต้องการใช้ curl ใน java คำถามของฉันคือ curl ในตัว java หรือฉันต้องติดตั้งจากแหล่งที่มาของบุคคลที่สามเพื่อใช้กับ Java ถ้าเป็นเช่นนั้นวิธีการติดตั้ง curl ใน java ฉันใช้ Googling มาเป็นเวลานาน แต่ไม่พบความช่วยเหลือใด ๆ หวังว่าทุกคนจะช่วยฉันได้

ขอบคุณล่วงหน้า.


@skaffman: ยังไม่มีอะไร ฉันเป็นโปรแกรมเมอร์ PHP ที่เพิ่งลองใช้ java โดยธรรมชาติแล้วฉันคุ้นเคยกับการม้วนผมมาก ดังนั้นในขณะที่ทำงานกับ java ในฐานะมือใหม่คำถามนี้เกิดขึ้นในใจของฉันยังคงเป็นเพราะความอยากรู้อยากเห็น แต่ฉันมั่นใจว่าในอนาคตอันใกล้นี้ฉันจะต้องใช้มัน หากใครรู้ทางเลือกอื่นที่ดีกว่าของ curl ใน java โปรดแบ่งปันด้วย จะเป็นประโยชน์มาก ขอบคุณ.
moshfiqur


ฉันถามเพราะ CURL ทำสิ่งต่างๆมากมายซึ่งบางอย่างมีอยู่ใน Java ซึ่งบางส่วนไม่ใช่ ข้อกำหนดเฉพาะเพิ่มเติมจะช่วยได้มากที่นี่
skaffman

คำตอบ:


138

คุณสามารถทำให้การใช้งานและjava.net.URL / หรือjava.net.URLConnection

URL url = new URL("https://stackoverflow.com");

try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) {
    for (String line; (line = reader.readLine()) != null;) {
        System.out.println(line);
    }
}

ดูบทช่วยสอนง่ายๆของ Oracleในหัวข้อนี้ด้วย อย่างไรก็ตามมันค่อนข้างละเอียด เพื่อให้ได้โค้ด verbose น้อยลงคุณอาจต้องพิจารณาApache HttpClientแทน

โดยวิธีการที่ถ้าคำถามต่อไปของคุณคือ "วิธีการผล HTML กระบวนการ" แล้วคำตอบคือ " ใช้ parser HTML . ไม่มีไม่ได้ใช้ regex สำหรับเรื่องนี้ ."

ดูสิ่งนี้ด้วย:


@BalusC: ขอบคุณ ทำการศึกษาจากลิงค์ที่คุณให้มา btw คุณรู้หรือไม่ว่าทางเลือกอื่นที่ดีกว่าของ curl ใน java ที่จะให้ฟังก์ชันการทำงานเหมือน curl? ขอบคุณอีกครั้ง.
moshfiqur

7
ตามที่กล่าวไว้ HttpClient คือ "ทางเลือกที่ดีกว่า" ในความเป็นจริงคุณสามารถทำทุกอย่างได้โดยที่URLConnectionคุณยังต้องรู้และเข้าใจข้อกำหนด HTTP อย่าพยายามเปรียบเทียบ PHP กับ Java มันเหมือนกับแอปเปิ้ลและส้ม เพื่อหลีกเลี่ยงปัญหา / ความสับสนในตัวเองให้ลืมเกี่ยวกับ PHP และนำเสนอมุมมองใหม่บน Java เป็นภาษาที่มีอุดมการณ์ที่แตกต่างกันอย่างสิ้นเชิง PS: ฉันทำทั้งสองอย่างดังนั้นฉันจึงบอกเล่าจากประสบการณ์
BalusC

เช่นนี้และคนอื่น ๆ ได้กล่าวถึงให้ใช้ HttpClient ฉันขอแนะนำให้หลีกเลี่ยงการใช้ libcurl จริงๆคุณต้องแน่ใจว่าคุณได้รวมไลบรารีเนทีฟสำหรับทุกแพลตฟอร์มที่คุณต้องการรองรับและไม่ช้าก็เร็วจะมีคนบ่นว่ามันใช้ไม่ได้กับเวิร์กสเตชัน mac หรือ SGI แบบเก่า
vickirk

คุณไม่คิดว่าการจับบล็อกจะดูดีเสมอเมื่อลองบล็อก: D
Muhammad Suleman

อ่า ... ตอนนี้ฉันเข้าใจแล้ว คุณสามารถใช้รหัสประเภทนี้ในกรณีที่เราต้องการลอง / จับแบบซ้อนกัน ขอโทษที่ผิดพลาด!
Muhammad Suleman


4

Runtimeวัตถุช่วยให้คุณสามารถรันแอพพลิเคบรรทัดคำสั่งภายนอกจากชวาและจึงจะยอมให้คุณใช้ม้วน แต่เป็นคำตอบอื่น ๆ บ่งชี้ว่าอาจมีวิธีที่ดีกว่าที่จะทำสิ่งที่คุณกำลังพยายามที่จะทำ หากสิ่งที่คุณต้องการทำคือดาวน์โหลดไฟล์วัตถุ URL จะใช้งานได้ดี


3

การใช้ java libs มาตรฐานฉันขอแนะนำให้ดูที่คลาส HttpUrlConnection http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html

สามารถจัดการสิ่งที่ curl ทำได้เกือบทั้งหมดด้วยการตั้งค่าการเชื่อมต่อ สิ่งที่คุณทำกับสตรีมขึ้นอยู่กับคุณ


3

Curl เป็นโปรแกรมที่ไม่ใช่ java และต้องจัดเตรียมไว้นอกโปรแกรม Java ของคุณ

คุณสามารถรับฟังก์ชั่นมากมายโดยใช้Jakarta Commons Netได้อย่างง่ายดายเว้นแต่จะมีฟังก์ชันเฉพาะบางอย่างเช่น "การถ่ายโอนประวัติ" ที่คุณต้องการ (ซึ่งเป็นเรื่องที่น่าเบื่อในการเขียนโค้ดด้วยตัวคุณเอง)


ดี แต่ Commons Net ไปไกลกว่า curl เล็กน้อย (มากเกินไป)
BalusC

2

ใช้Runtimeเพื่อเรียก Curl รหัสนี้ใช้ได้กับทั้ง Ubuntu และ Windows

String[] commands = new String {"curl", "-X", "GET", "http://checkip.amazonaws.com"};
Process process = Runtime.getRuntime().exec(commands);
BufferedReader reader = new BufferedReader(new 
InputStreamReader(process.getInputStream()));
String line;
String response;
while ((line = reader.readLine()) != null) {
    response.append(line);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.