2017-05-02 103 views
-2

我遇到了一個問題,我在perl腳本中使用cURL來執行http請求。我相信我的問題與URL字符串中的特殊字符有關,但我無法弄清楚如何使其工作。使用Curl進行Perl網址編碼

我可以確認URL是正確的,因爲我可以從我的瀏覽器運行它。

我的Perl腳本是

#!/usr/bin/perl 
use strict; 
use warnings; 

$url = "http://machine/callResync?start=2017-02-01 00.00.00.000&end=2017-02-01 23.23.999"; 

system "curl $url 

當到達第一個空格它失敗。我厭倦了使用%20來逃避。

之後,我把%26放到了&之內,但後來我又遇到了另一個問題。我已經厭倦了一些不同的組合,但它一直在失敗。

任何想法的。

+1

你爲什麼不使用Perl模塊,如:[WWW:捲曲(http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib /WWW/Curl.pm)而不是系統調用 – Jens

+2

您不需要轉義'&'。這是網址的一部分。 – simbabque

+0

使用數組將參數傳遞給'system'。 – ceving

回答

1

使用URI模塊正確地創建一個URL,而非炮擊了捲曲你應該使用Perl庫類似LWP::Simple訪問頁面

LWP::Simple的缺點是,它可能是簡單因爲如果交易失敗,它不提供診斷。如果你發現你需要更詳細的東西,那麼你應該看看 HTTP::Tiny, LWP::UserAgentMojo::UserAgent。 如果您需要幫助這些,那麼請讓

use strict; 
use warnings 'all'; 

use URI; 
use LWP::Simple 'get'; 

my $url = URI->new('http://machine/callResync'); 
$url->query_form(
    start => '2017-02-01 00.00.00.000', 
    end => '2017-02-01 23.23.999', 
); 

my $content = get($url) or die "Failed to access URL"; 
+0

謝謝鮑羅廷,那很好。 – teamerMan

0

問題數1:你使用了無效的URL。空格不能出現在URL中。

my $url = "http://machine/callResync?start=2017-02-01%2000.00.00.000&end=2017-02-01%2023.23.999"; 

問題號2:外殼噴射錯誤。你沒有正確地形成你的shell命令。

system('curl', $url); 

use String::ShellQuote qw(shell_quote); 

my $cmd = shell_quote('curl', $url); 
system($cmd);