在这种情况下,我要使用NEXMO API来获取报告
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import io.restassured.specification.RequestSpecification;
import net.minidev.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.io.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class POSTRequest {
@Test
public void RegistrationSuccessful()
{
RestAssured.baseURI ="https://api.nexmo.com";
RequestSpecification request = RestAssured.given();
// Sending Request Parameters
JSONObject requestParams = new JSONObject();
requestParams.put("api_key", "xxxx"); // Cast
requestParams.put("api_secret", "xxxx");
requestParams.put("sig", "xxxxxxxxxxxxxxxx");
//Sending Request Body
RequestSpecification APIBOdy =request.body("{\n" +
" \"product\": \"SMS\",\n" +
" \"start_date\": \"2019-10-26T00:00:00+0000\",\n" +
" \"end_date\": \"2019-10-27T00:00:00+0000\",\n" +
" \"sms_type\":\"MT\"\n" +
"}")
.header("Content-Type","application/json");
APIBOdy.contentType(ContentType.JSON);
Response response = request.post("/v1/reports/");
//Printing Response on console
System.out.println(response.getBody().asString());
//Checking Status Code
int statusCode = response.getStatusCode();
Assert.assertEquals(statusCode, "201");
String successCode = response.jsonPath().get("SuccessCode");
Assert.assertEquals( "Correct Success code was returned", successCode, "OPERATION_SUCCESS");
}
}
我得到的回应:
{“ type”:“未经授权”,“ error_title”:“未经授权”}
java.lang.AssertionError:预期为[201],但发现为[401] 预期:201 实际:401
即使我在邮递员中以相同的身体和参数命中相同的请求,我也会获得准确的响应。
答案 0 :(得分:1)
您将要使用v2规范来满足您的报告API需求,因为不支持v1。这将需要更改您的请求正文,并且您的授权方式请参见:https://developer.nexmo.com/api/reports有关详细信息
规范中的一些亮点是api密钥/ api秘密是要通过基本授权以标头形式作为冒号连接对传递给标头的,因此您的Authorization标头将如下所示:
Basic API_KEY:API_SECRET
您当然需要将API_KEY:API_SECRET字符串转换为以64为基数 可以通过从字符串中提取字节并使用Convert.ToBase64String
来完成var authBytes = Encoding.UTF8.GetBytes(apiKey + ":" + apiSecret);
var authString = Convert.ToBase64String(authBytes)
在您的请求正文中,您还将需要产品,accountId和方向-对于创建报告发布请求,您将不需要任何查询参数。
在V1中,我看不到任何有关如何生成签名的迹象,但您不能同时使用sig或api机密。有关签名生成的更多信息,请参见:https://developer.nexmo.com/concepts/guides/signing-messages
但是实际上,您不应该使用V1,因为它不受支持。
希望这会有所帮助!