LinkedIn API와 통합 된 클라이언트 용 애플리케이션을 만들고 있습니다. 너무 많은 문제없이 인증을 통과했지만, 모든 작업이 진행 중이고 이제는 실제 요청을해야합니다. 주로 Share API에서 작업하고 있습니다. 나는 다음과 같은 메소드를 사용하여 HTTP 호출을 만들 :LinkedIn API에 대한 OAuth 요청으로 인해 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 오류를 주므로 요청에 서명 한 기본 문자열에서 무엇을 사용해야하는지 궁금합니다.
루카스, 나는 API 커넥터를 구현하기 위해 linkedin-j를 사용하기 시작했다. 그러나 일단 OAuth 구현을 끝내고 API 메소드로 이동하면이 오류가 계속 발생했다 : ' javax.xml.bind.JAXBException : "com. google.code.linkedinapi.schema "ObjectFactory.class 또는 jaxb.index'를 포함하지 않습니다. 네가 그걸 다룰 지 궁금해했다. 어떻게 그걸 넘겼 는가? –
여기에서 어떤 우편 번호를 얻었습니까? http://code.google.com/p/linkedin-j/downloads/list? linkedin-j-1.0.415-binary.zip 또는 1.0.429 베타 2 진 파일을 가져와야합니다. * 모든 * JAR 파일을 가져 와서 서버에 있어야합니다 (설치 프로그램에 따라 다름, 일반적으로 # server.ColdFusion.ROOTDIR # \ lib \에 있음). 그런 다음 CF를 다시 시작해야합니다. 게시 한 오류에서 JAR 중 하나가 누락 된 것으로 보입니다. – Lucas
실제로 JavaLoader를 사용하고 있으며 JAXB가 올바르게 작동하기 위해 몇 가지 특별한 사항을 포함하기 위해 linkedin-j JAR을 다시 컴파일해야했습니다. 이슈 페이지의 이슈 # 53에있었습니다. –