标签: unirest

Java应用程序中的Mashape Unirest的java.lang.NoSuchFieldError:org.apache.http.message.BasicLineFormatter.INSTANCE

我有一个Maven Java项目,它使用Mashape Unirest将HTTP请求发送到其他URL.我目前正在编写一个使用Unirest发送普通HTTP请求的集成测试(使用TestNG).当我通过Maven(通过Failsafe插件)运行集成测试时,请求成功发送.但是,当我尝试通过Eclipse运行集成测试时,我继续收到以下错误:

FAILED: getCurrentTimeTest
java.lang.NoSuchFieldError: INSTANCE
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:72)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:84)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:59)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:487)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:147)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:136)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:112)
    at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:726)
    at com.mashape.unirest.http.options.Options.refresh(Options.java:41)
    at com.mashape.unirest.http.options.Options.<clinit>(Options.java:27)
    at com.mashape.unirest.http.HttpClientHelper.prepareRequest(HttpClientHelper.java:141)
    at com.mashape.unirest.http.HttpClientHelper.requestAsync(HttpClientHelper.java:80)
    at com.mashape.unirest.request.BaseRequest.asStringAsync(BaseRequest.java:56)
    at ...
Run Code Online (Sandbox Code Playgroud)

我还能够使用基本的Java应用程序脚本重现此错误.

我确保我在pom.xml文件中使用的依赖项是最新的和最好的,如下所示:

<dependency>
    <groupId>com.mashape.unirest</groupId>
    <artifactId>unirest-java</artifactId>
    <version>1.3.5</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.3.2</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpasyncclient</artifactId>
    <version>4.0</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.3.2</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20140107</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.3.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我还检查了源代码 …

java maven apache-httpclient-4.x unirest mashape

36
推荐指数
2
解决办法
5万
查看次数

如何解析Unirest调用的JSON结果

我正在使用Unirest库从Mashape API中检索JSON.我使用以下代码进行调用:

HttpResponse<JsonNode> request = Unirest.get(URL)
  .header("X-Mashape-Authorization", MASHAPE_AUTH)
  .asJson();
Run Code Online (Sandbox Code Playgroud)

这将以HttpResponse<JsonNode>我不熟悉的形式返回我的JSON .

从阅读有限的文档,似乎我必须调用getBody()响应对象,以获得一个JsonNode对象.我仍然不知道如何处理JsonNode对象.

开始解析这些数据的最佳方法是什么?

编辑: 如果它有助于提供示例,我想要解析的JSON看起来像这样:

{
  "success": "1",
  "error_number": "",
  "error_message": "",
  "results": [
    {
      "name": "name1",
      "formatedName": "Name 1"
    },
    {
      "name": "testtesttest",
      "formatedName": "Test Test Test"
    },
    {
      "name": "nametest2",
      "formatedName": "Name Test 2"
    },
    {
      "name": "nametest3",
      "formatedName": "Name Test 3"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

java android json unirest mashape

19
推荐指数
4
解决办法
4万
查看次数

使用Unirest JAVA进行身份验证

我需要对执行补丁程序的Web应用程序执行请求.我正在向这个请求提供它请求我的参数,但我不知道如何从我在补丁请求之前执行的登录请求中传递凭据.我正在尝试从登录响应的标题中获取cookie数据并将其作为简单字符串提供给补丁请求,但我不确定它是否是正确的方法.基本上我正在做的就是这个.

HttpResponse<JsonNode> respuesta = Unirest.post(urlLogin)
    .headers(headers)
    .fields(fields)
    .asJson();
JSONObject body = respuesta.getBody().getObject();
Headers headerBody = respuesta.getHeaders();
String tmp = headerBody.get("set-cookie").get(0);
this.cookie = "sd-touch-mode=false; ".concat(tmp.replace(";Path=/;HttpOnly",""));
Map<String,String> cabeceras = new HashMap<String, String>();
cabecera.put("Cookie", this.cookie);
HttpResponse<JsonNode> respuesta = Unirest.post(urlFixpack)
    .headers(headers)
    .fields(fields)
    .asJson();
Run Code Online (Sandbox Code Playgroud)

我对获取和设置cookie数据的方式感到不舒服,但我没有在文档中找到任何正确的方法.

请有人帮帮我.

谢谢.

java cookies unirest

11
推荐指数
1
解决办法
6346
查看次数

如何使Unirest(java)忽略证书错误

我正在使用Unirest(java版本)来发出GET和POST请求.但是我在访问SSL加密站点时遇到问题,因为我的程序在公司网络后面,网络管理员为我设置了防火墙映射.例如foobar.com映射到56.1.89.12:4444.但是当我向地址发出请求时,我将收到以下ssl证书错误:

com.mashape.unirest.http.exceptions.UnirestException: javax.net.ssl.SSLException: hostname in certificate didn't match: <56.1.89.12> != <www.foobar.com>
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:131)
    at com.mashape.unirest.request.BaseRequest.asString(BaseRequest.java:52)
Run Code Online (Sandbox Code Playgroud)

我看到Unirest有使用自定义的高级配置httpclient.所以我使用

Unirest.setHttpClient(MyHttpClient.makeClient());
HttpResponse<String> res = null;
try {
    res = Unirest.get(urlstr).asString();
} catch (UnirestException e) {
    e.printStackTrace();
}
String jsonstr = res.getBody();
Run Code Online (Sandbox Code Playgroud)

所述makeClient的方法MyHttpClient为:

public static HttpClient makeClient(){
 SSLContextBuilder builder = new SSLContextBuilder();
 CloseableHttpClient httpclient = null;
    try {
        // builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
        builder.loadTrustMaterial(null, new TrustStrategy(){
            public boolean isTrusted(X509Certificate[] chain, String authType)
                throws CertificateException …
Run Code Online (Sandbox Code Playgroud)

java apache-httpclient-4.x unirest

10
推荐指数
3
解决办法
1万
查看次数

如何使用Unirest for Java获取对象列表?

我可以使用Unirest来获取我自己的类的对象,如下所示:

HttpResponse<Item> itemResponse = Unirest.get("http://localhost:8080/item").asObject(Item.class);
Run Code Online (Sandbox Code Playgroud)

我也可以将类型参数设置为List,这确实给了我一个哈希映射列表,但我想得到一个项目列表.这可能吗?

java unirest

9
推荐指数
1
解决办法
3300
查看次数

在Unirest中获取本机REST服务错误

我们使用Unirest作为REST客户端.下面是我们调用REST服务的示例代码

HttpResponse<JsonNode> response = Unirest
  .post(url)
  .header(HEADER_CONTENT_TYPE, HEADER_VALUE_APPLICATON_JSON)
  .body(payload)
  .asJson();
Run Code Online (Sandbox Code Playgroud)

当REST服务返回json时,这是绝对的.如果出现错误,我使用的REST服务不会返回json响应.相反,它返回html错误页面.

由于Unirest试图将html转换为json,因此遇到以下问题

Caused by: com.mashape.unirest.http.exceptions.UnirestException: java.lang.RuntimeException: java.lang.RuntimeException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:143)
    at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们只是得到这个InvalidJsonException并且实际的html错误页面丢失了.我们需要在出现错误时在我们的应用程序中显示html错误页面.

在这种情况下,我们如何才能获得原始的REST服务错误?

java json unirest mashape

9
推荐指数
1
解决办法
5452
查看次数

找不到类 java.io.ByteArrayInputStream 的序列化程序

从 openfire rest api 获取用户实体时,我收到以下错误消息。(我正在用 openfire Restapi 端点包装我的 Api 端点。)

“错误”:“内部服务器错误”,“异常”:“org.springframework.http.converter.HttpMessageNotWritableException”,“消息”:“无法编写 JSON:找不到类 java.io.ByteArrayInputStream 的序列化程序,也未发现任何属性创建 BeanSerializer(为了避免异常,禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.io.ByteArrayInputStream 并且没有发现创建 BeanSerializer 的属性(为了避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过参考链:com.mashape.unirest.http.HttpResponse[\"rawBody\"])", "path": "/usersInfo/user2"

代码如下。

String  host ="http://abdul01anpi01:9090" ;
String userEndPoint = "/plugins/restapi/v1/users" ;
String apiURL = host+userEndPoint ;
HttpResponse<JsonNode> response =null;

response = Unirest.get(apiURL +"/{username}").header("accept", "application/json").header("Content-Type", "application/json").routeParam("username",String.valueOf(username)).asJson();
Run Code Online (Sandbox Code Playgroud)

响应的预期输出如下。

{
    "username": "user2",
    "name": "user2",
    "properties": null
}
Run Code Online (Sandbox Code Playgroud)

请建议,任何帮助表示赞赏。

java spring unirest

6
推荐指数
2
解决办法
3万
查看次数

Unirest 线程泄漏

我的网络应用程序似乎内存不足,我认为这是由于线程泄漏。线程似乎一直在等待,并且越来越大,直到内存达到堆大小的顶部。在空闲且不使用 Web 应用程序时,Web 应用程序的本地 Tomcat 服务器上的线程大小会增加。我对线程泄漏没有很好的理解,但我确信线程应该被释放以释放分配的内存。

我进行了线程转储,其中很多线程都在 com.mashape.unirest.http.utils.SyncIdleConnectionMonitorThread 上等待,如下所示。

"Thread-124" - Thread t@378
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
- waiting on <44c53e01> (a com.mashape.unirest.http.utils.SyncIdleConnectionMonitorThread)
at com.mashape.unirest.http.utils.SyncIdleConnectionMonitorThread.run(SyncIdleConnectionMonitorThread.java:22)

Locked ownable synchronizers:
- None

"Thread-122" - Thread t@371
java.lang.Thread.State: TIMED_WAITING
at java.lang.Object.wait(Native Method)
- waiting on <3212c7ae> (a com.mashape.unirest.http.utils.SyncIdleConnectionMonitorThread)
at com.mashape.unirest.http.utils.SyncIdleConnectionMonitorThread.run(SyncIdleConnectionMonitorThread.java:22)

Locked ownable synchronizers:
- None
Run Code Online (Sandbox Code Playgroud)

任何解决此问题的有用提示将不胜感激。

java multithreading unirest

6
推荐指数
1
解决办法
499
查看次数

使用带有 put 的 unirest 文件发送时获取 ERR_FS_FILE_TOO_LARGE

我正在使用 unirest 上传这样的文件

 unirest.put(fullUri)
    .auth({
      user: self.userName,
      pass: self.password
    })
    .header('X-Checksum-Sha1', sha1Hash)
    .header('X-Checksum-Md5', md5Hash)
    .send(fs.readFileSync(filePath))
    .end(function (response) {
Run Code Online (Sandbox Code Playgroud)

这适用于较小的文件,但对于大文件,我收到 ERR_FS_FILE_TOO_LARGE 错误。我已经尝试过max_old_space_size但没有成功。看起来我可以通过流式传输文件来解决这个问题,但是我在 unirest js 库中找不到一个 api 来做到这一点。

javascript node.js unirest

6
推荐指数
1
解决办法
252
查看次数

如何设置Unirest代理的凭据?

Unirest关于代理设置的文档提及使用:

Unirest.setProxy(new HttpHost("127.0.0.1",8000));

由于我正在使用的代理需要身份验证,我还需要指定凭据,但我不知道如何.

java unirest

5
推荐指数
1
解决办法
2623
查看次数