2011-03-02 97 views
0

我有兩個網站products.company.combugzilla.internal.com。我想從products.company.com頁面訪問錯誤信息。我設置了一個jQuery ajax函數來對bugzilla.internal.com/jsonrpc.cgi進行jsonrpc調用。但是由於跨域腳本限制,這被apache阻止(如預期的那樣)。於是我拍了ajax就products.company.com CGI腳本,然後在腳本中使用捲曲的要求拍客到bugzilla.internal.com/jsonrpc.cgi,但現在它說什麼是從不同域訪問bugzilla webservice的好方法?

您沒有權限訪問 /jsonrpc.cgi

怎麼辦?

如果它使任務更簡單,我只想使用get bug功能。

回答

1

如果您在products.company.com上的Web服務器是Apache,則可以設置ProxyPass。

如果您不能修改Web服務器的配置,然後在products.company.com一個簡單的代理CGI可以做的伎倆:

#!/usr/bin/perl 

use LWP::UserAgent; 
use CGI qw(:standard); 



my $URL='http://bugzilla.internal.com/jsonrpc.cgi'; 

my $q = new CGI; 
my $query = &query_string(); 

my $req = HTTP::Request->new(POST => $URL); 
$req->content_type('application/x-www-form-urlencoded'); 
$req->content($query); 

my $ua = LWP::UserAgent->new; 
$res = $ua->request($req); 

if ($res->is_success) { 
    printf "Content-Type: %s\n\n", $res->header('Content-Type'); 
    print $res->content; 
} else { 
    printf "Content-Type: text/plain\n\n"; 
    print "Error: " . $res->status_line . "\n"; 
} 



print $cgi->header(-type => 'text/xml'); 
print $response->decoded_content; 
1

你有幾個選項。您可以讓products.company.combugzilla.internal.com發出請求,並讓它基本上充當代理。

另一種選擇是從客戶端使用jsonp - 這將允許跨域調用。 Here's關於jsonp入門的相當不錯的IBM文章。

+1

不jsonp只允許我從另一臺服務器中提取json數據嗎?在我的情況下,我想將json數據發送到bugzilla webservice。 – 2011-03-05 06:40:00

0

有跨域腳本編寫限制一些變通。我沒有測試過,但easyXDM似乎做你想要的。

相關問題