1

Apache HTTPClientを使用して RESTful API のテストを書いていますが、大きなリクエスト (80,000 文字以上が返される) を行うと、レスポンスが途切れます。カットオフのポイントは、通常、約 85,275 です。curl のコマンド ラインからまったく同じ要求を実行して、ステートメント全体を取得できます。

私がヒットしているシステムはTomcatを実行しており、サーバーログは応答全体が返されていることを示しているため、HTTPClientがデータを戻す方法に問題があるように思えます。

Rest Assured (HTTPClient を使用) と HTTPClient の両方でこれを直接行って、問題が Rest Assured にないことを確認しました。CoreConnectionPNames パラメーター CONNECTION_TIMEOUT、MAX_LINE_LENGTH、SO_TIMEOUT、および SOCKET_BUFFER_SIZE を含むいくつかのパラメーターを変更しました。

例として、Rest Assured では

given()
    .param("areaCode", "515")
    .param("quantity", "5000")
.expect()
    .statusCode(200)
    .body("SearchResults.ResultCount", equalTo("5000"),
          "SearchResults.TelephoneNumberList.TelephoneNumber[0]", startsWith("515"),
          "SearchResults.TelephoneNumberList.TelephoneNumber[1]", startsWith("515"),            
          "SearchResults.TelephoneNumberList.TelephoneNumber[2]", startsWith("515"))
.when()
    .get("/accounts/1/availableNumbers");

または HTTPClient で

// I've set up an httpclient with standard stuff to ignore the self-signed 
// certs in our development environment
DefaultHttpClient httpclient = getNewHttpClient();

httpclient.getCredentialsProvider().
    setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
                   new UsernamePasswordCredentials("xxxx", "xxxx"));

org.apache.http.client.utils.URIBuilder builder = 
    new org.apache.http.client.utils.URIBuilder();

builder.setScheme("https")
    .setHost("api.test.xxxx.com")
    .setPath("/accounts/1/availableNumbers")
    .setParameter("areaCode", "515")
    .setParameter("quantity", "5000");

URI uri = builder.build();

HttpGet httpget = new HttpGet(uri);

// print out request URI
System.out.println(httpget.getURI());

HttpResponse response = httpclient.execute(httpget);

if (response.getStatusLine().getStatusCode() != 200)
{
    throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
}

BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));

String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null)
{
   System.out.println(output);
}
4

0 に答える 0