2008-09-25 17 views
30

मेरे पास कुछ सरल कोड है जो मैंने PHP में हमारे सरल webservice का उपभोग करने के लिए लिखा है, जिसे मैं पर्ल में उन उपयोगकर्ताओं के लिए भी प्रदान करना चाहता हूं जो उस भाषा को पसंद कर सकते हैं। ऐसा करने के लिए HTTP अनुरोध करने का सबसे आसान तरीका क्या है? PHP में मैं इसे file_get_contents() के साथ एक पंक्ति में कर सकता हूं।पर्ल में HTTP GET अनुरोध करने का सबसे आसान तरीका क्या है?

यहाँ पर्ल के लिए पूरे कोड बंदरगाह के लिए मैं चाहता हूँ:

/** 
* Makes a remote call to the our API, and returns the response 
* @param cmd {string} - command string ID 
* @param argsArray {array} - associative array of argument names and argument values 
* @return {array} - array of responses 
*/ 
function callAPI($cmd, $argsArray=array()) 
{ 
    $apikey="MY_API_KEY"; 
    $secret="MY_SECRET"; 
    $apiurl="https://foobar.com/api"; 

    // timestamp this API was submitted (for security reasons) 
    $epoch_time=time(); 

    //--- assemble argument array into string 
    $query = "cmd=" .$cmd; 
    foreach ($argsArray as $argName => $argValue) { 
     $query .= "&" . $argName . "=" . urlencode($argValue); 
    } 
    $query .= "&key=". $apikey . "&time=" . $epoch_time; 

    //--- make md5 hash of the query + secret string 
    $md5 = md5($query . $secret); 
    $url = $apiurl . "?" . $query . "&md5=" . $md5; 

    //--- make simple HTTP GET request, put the server response into $response 
    $response = file_get_contents($url); 

    //--- convert "|" (pipe) delimited string to array 
    $responseArray = explode("|", $response); 
    return $responseArray; 
} 

उत्तर

57

LWP :: सरल:

use LWP::Simple; 
$contents = get("http://YOUR_URL_HERE"); 
+1

तो ... हमें एलडब्ल्यूपी :: सरल का उल्लेख करने वाले चार प्रतिक्रियाएं मिली हैं, मुझे लगता है कि – davr

+1

का उपयोग करने वाला एक है 'http: // URL' जैसे स्थिर तारों के लिए, काम को perl बचाने के लिए सिंगल कोट्स का उपयोग करना सबसे अच्छा है चीजों को interpolate की तलाश में। – AndrewJFord

+8

स्थैतिक तारों के लिए, डबल कोट्स के साथ कोई _real_ ओवरहेड नहीं है। सिंगल कोट्स का उपयोग करने का कारण यह है कि अगले प्रोग्रामर को यह स्पष्ट करना है कि उन्हें कोड में इंटरपोलेशंस देखने की आवश्यकता नहीं है। –

1

HTTP::Request मॉड्यूल का प्रयास करें। इस कक्षा के उदाहरण आमतौर पर एलडब्ल्यूपी :: UserAgent ऑब्जेक्ट के अनुरोध() विधि को पास किए जाते हैं।

13

एलडब्ल्यूपी :: सरल में वह कार्य है जिसे आप ढूंढ रहे हैं।

use LWP::Simple; 
$content = get($url); 
die "Can't GET $url" if (! defined $content); 
1

Mojo::UserAgent भी एक शानदार विकल्प है!

use Mojo::UserAgent; 
    my $ua = Mojo::UserAgent->new; 

    # Say hello to the Unicode snowman with "Do Not Track" header 
    say $ua->get('www.☃.net?hello=there' => {DNT => 1})->res->body; 

    # Form POST with exception handling 
    my $tx = $ua->post('https://metacpan.org/search' => form => {q => 'mojo'}); 
    if (my $res = $tx->success) { say $res->body } 
    else { 
    my ($err, $code) = $tx->error; 
    say $code ? "$code response: $err" : "Connection error: $err"; 
    } 

    # Quick JSON API request with Basic authentication 
    say $ua->get('https://sri:[email protected]/search.json?q=perl') 
    ->res->json('/results/0/title'); 

    # Extract data from HTML and XML resources 
    say $ua->get('www.perl.org')->res->dom->html->head->title->text;` 

सीपीएएन पृष्ठ से सीधे नमूने। मैंने इसका इस्तेमाल तब किया जब मैं एलडब्ल्यूपी नहीं प्राप्त कर सकता था :: मेरी मशीन पर काम करने के लिए सरल।

0

तो UNIX में और अगर कोई LWP अपने :: सरल स्थापित है, तो आप

my $content = `GET "http://trackMyPhones.com/"`; 
+0

"जीईटी" क्या है? यह स्थापित नहीं है और मेरे उबंटू 14.04 लिनक्स पर काम नहीं करता है। –

+0

'GET'' LWP' पर्ल लाइब्रेरी के साथ स्थापित एक उपयोगिता है। – reinierpost

0

कोशिश कर सकते हैं मुझे लगता है कि श्रीहरि को संदर्भित किया जा सकता है Wget है, लेकिन क्या मैं वास्तव में (फिर से, बिना सिफारिश करेंगे * nix पर LSP :: सरल) cURL

$ my $content = `curl -s "http://google.com"`; 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML> 

-s झंडा कर्ल बताता है चुप रहने की उपयोग करने के लिए किया जाएगा। अन्यथा, आपको प्रत्येक बार stderr पर कर्ल की प्रगति बार आउटपुट मिलता है।

संबंधित मुद्दे