我正在使用RestAssured库实现NetSuite Restlet的自动化。此Restlets使用OAuth 1.0进行身份验证。除了消费者密钥、消费者秘密、访问令牌和令牌秘密之外,我还需要设置领域等高级字段。但我找不到任何在RestAssured中设置的方法。
RequestSpecification request = new RequestSpecBuilder()
.addHeader("Content-Type", ContentType.JSON.toString())
.setBaseUri(url).build()
.auth().oauth(
netsuiteConfig.getNetsuiteConsumerKey(),
netsuiteConfig.getNetsuiteConsumerSecret(),
netsuiteConfig.getNetsuiteTokenId(),
netsuiteConfig.getNetsuiteTokenSecret()
);
下面是使用Postman的api调用
发布于 2019-11-18 07:51:26
RestAssured不支持此功能。使用一些库(我用过com.github.seratch:signedrequest4j
)创建OAuth 1.0字符串,并在RestAssured RequestSpecification
中设置Authorization
header。
OAuthConsumer consumer = new OAuthConsumer(consumerKey, consumerSecret);
OAuthAccessToken accessToken = new OAuthAccessToken(tokenId, tokenSecret);
OAuthRealm realm = new OAuthRealm(myRealm);
SignedRequest request =
SignedRequestFactory.create(realm, consumer, accessToken);
request.readQueryStringAndAddToSignatureBaseString(url);
request.setHeader("Content-Type", "application/json");
String oAuthNonce = String.valueOf((new SecureRandom()).nextLong());
Long oAuthTimestamp = System.currentTimeMillis() / 1000L;
String signature = request.getSignature(url,
HttpMethod.POST, oAuthNonce, oAuthTimestamp);
String authorizationHeader = request
.getAuthorizationHeader(signature, oAuthNonce, oAuthTimestamp);
发布于 2020-02-04 22:05:15
我在使用上一个答案中提到的库,但后来我意识到我需要使用不受支持的补丁请求。
我开始使用google oauth client,经过几天的尝试,终于让这个例子起作用了:
val signer = OAuthHmacSigner()
signer.clientSharedSecret = CONSUMER_SECRET
signer.tokenSharedSecret = TOKEN_SECRET
val oauthParameters = OAuthParameters()
oauthParameters.consumerKey = CONSUMER_KEY
oauthParameters.token = ACCESS_TOKEN
oauthParameters.signer = signer
val genericUrl = GenericUrl("https://{ACC_ID}.suitetalk.api.netsuite.com/path/to/endpoint")
oauthParameters.version = "1.0"
oauthParameters.computeNonce()
oauthParameters.computeTimestamp()
oauthParameters.computeSignature("GET", genericUrl)
oauthParameters.realm = REALM
val authHeader = oauthParameters.authorizationHeader
RestAssured.with()
.log().all()
.header("Authorization", authHeader)
.urlEncodingEnabled(false)
.request(Method.GET, genericUrl.toString())
.then()
.statusCode(200)
对于已编码的具有查询参数的urls,urlEncoding
设置为false。例如:{url}/invoice?q=internalid%20IS%2012
我希望它能在未来帮助一些人!
https://stackoverflow.com/questions/58887080
复制相似问题