2
我正在爲與LinkedIn API集成的客戶端創建應用程序。我通過了身份驗證,沒有太多問題,但所有工作都正常,現在我需要提出實際的請求。主要是我在Share API中工作。我創建具有以下方法HTTP調用:OAuth對LinkedIn API的請求導致401錯誤
public any function sendRequest(any req){
var param = false;
var headParams = [];
var bodyParams = [];
var call = new http(proxyserver='192.168.201.12', proxyport=8888);
var i = 1;
call.setUrl(Arguments.req.getRequestUrl());
call.setMethod(Arguments.req.getMethod());
getSigner().signRequest(Arguments.req);
headParams = Arguments.req.getParameters(true);
bodyParams = Arguments.req.getParameters();
if(arrayLen(bodyParams)){
call.addParam(
type='header',
name='Authorization',
value="OAuth#Variables.encoder.encodedParameter(Arguments.req.getParameters(true), true, false, true)#"
);
}
// Header parameters
if(!arrayLen(bodyParams)){
for(i=1; i<=arrayLen(headParams); i++){
param = headParams[i];
call.addParam(
type=Arguments.req.getParameterType(),
name=Variables.encoder.parameterEncodedFormat(param.name),
value=param.value
);
}
}
// Body parameters (should only be 1)
if(arrayLen(bodyParams)){
for(i=1; i<=arrayLen(bodyParams); i++){
param = bodyParams[i];
call.addParam(
type='xml',
value=param.value
);
}
}
return call.send().getPrefix();
}
當我簽名的請求,我使用下面的方法:
public void function signRequest(any req){
var headParams = Arguments.req.getParameters(true);
var bodyParams = Arguments.req.getParameters();
var secret = "#Variables.encoder.parameterEncodedFormat(getConsumer().getConsumerSecret())#&#Variables.encoder.parameterEncodedFormat(Arguments.req.getOAuthSecret())#";
var base = '';
params = Variables.encoder.encodedParameter(headParams, true, true);
params = "#params#&#Variables.encoder.parameterEncodedFormat(bodyParams[1].value)#";
secret = toBinary(toBase64(secret));
local.mac = createObject('java', 'javax.crypto.Mac').getInstance('HmacSHA1');
local.key = createObject('java', 'javax.crypto.spec.SecretKeySpec').init(secret, local.mac.getAlgorithm());
base = "#Arguments.req.getMethod()#&";
base = base & Variables.encoder.parameterEncodedFormat(Arguments.req.getRequestUrl());
base = "#base#&#Variables.encoder.parameterEncodedFormat(params)#";
//writeDump(base) abort;
local.mac.init(local.key);
local.mac.update(JavaCast('string', base).getBytes());
Arguments.req.addParameter('oauth_signature', toString(toBase64(mac.doFinal())), true);
}
我試圖與僅將報頭參數簽署它(通常的OAuth PARAMS )幷包含body參數(xml字符串),但是所有事情都會給我一個401錯誤,所以我想知道在應用程序的基礎字符串中應該使用什麼?
Lucas,我開始使用linkedin-j來實現我的API連接器,但是一旦我完成OAuth實現並轉移到API方法中,我就不斷收到此錯誤:' javax.xml.bind.JAXBException:「com。 google.code.linkedinapi.schema「不包含ObjectFactory.class或jaxb.index'。我想知道你是否處理了它,以及你是如何通過它的? – 2012-04-09 02:36:23
你從這裏http://code.google.com/p/linkedin-j/downloads/list得到了哪個zip?應該獲得linkedin-j-1.0.415-binary.zip或1.0.429測試版二進制文件。從那裏獲取所有JAR,並將它們放在服務器上的位置(取決於安裝方式,通常在#server.ColdFusion.ROOTDIR#\ lib \中)。然後你需要重新啓動CF.從你發佈的錯誤看來,其中一個JAR缺失。 – Lucas 2012-04-10 09:45:32
我實際上使用JavaLoader,並且必須重新編譯linkedin-j JAR以包含一些特殊的事情,以便JAXB正常工作。它在問題頁面的問題#53中。 – 2012-04-10 15:44:21