当我使用政府许可的 Google API 密钥时,我在从 Google 获取地理编码时遇到了问题。这个项目是为政府开发的,所以我们应该可以使用这个 API 密钥。政府代理人告诉我,只要我使用此 API 密钥并将我们公司的域添加到他们的列表中,我们应该能够在不受 Google 免费限制的情况下进行地理编码。我正在使用 Oracle 11gR2、Apex 4.1。谷歌确实返回了一些结果(1600个地理编码),过了一会儿我的程序出现了异常。但是,我遇到了以下问题:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1722
ORA-29259: end-of-input reached
ORA-06512: at "SORS.SOR_TEST_SERVICE", line 24
ORA-06512: at "SORS.SOR_TEST_SERVICE", line 187
ORA-06512: at line 6
29273. 00000 - "HTTP request failed"
*Cause: The UTL_HTTP package failed to execute the HTTP request.
*Action: Use get_detailed_sqlerrm to check the detailed error message.
Fix the error and retry the HTTP request.
我在网上搜索并在OTN上找到了以下线程:
https://forums.oracle.com/forums/thread.jspa?threadID=2253491
看来我需要获得 Google API 证书并将其安装在 Oracle 钱包上。我对此没有任何经验。谁能给我一张关于它的路线图?例如,如何获得 Google 证书?我应该与 Google 联系,还是使用许可 API 密钥发送请求?还是 API 密钥是证书?一个例子会很有帮助!
这是我的代码
procedure Get_Geocoding(P_s_Address in varchar2, P_s_Geocoding out varchar2, P_n_accuracy out number, P_b_success out boolean) is
l_address varchar2(4000);
l_url varchar2(32000);
l_response varchar2(3200);
n_first_comma number;
n_second_comma number;
n_level_length number;
BEGIN
/* TODO implementation required */
l_address:=APEX_UTIL.URL_ENCODE(P_s_Address);
l_address := replace(l_address,' ','+');
l_url := 'http://maps.google.com/maps/geo?q='||l_address||'&'||'output=csv'||'&'||'key=my API key';
l_response := utl_http.request(l_url, APEX_APPLICATION.G_PROXY_SERVER);
n_first_comma:=instr(l_response,',',1,1);
n_second_comma:=instr(l_response,',',1,2);
n_level_length:=n_second_comma-n_first_comma-1;
P_n_accuracy:=to_number(substr(l_response,n_first_comma+1, n_level_length));
l_response:=substr(l_response,instr(l_response,',',1,2)+1);
P_s_Geocoding:=l_response;
if (P_s_Geocoding<>'0,0') then
P_b_success:=true;
else
P_b_success:=false;
end if;
END;
}
非常感谢!
山姆