当前位置: 首页 > 面试题库 >

使用HTTP客户端发送和解析响应以获取JSON列表

殳智志
2023-03-14
问题内容

在我的Java代码中,我需要向具有3个标头的特定URL发送http发布请求

URL: http://localhost/something
Referer: http://localhost/something 
Authorization: Basic (with a username and password)
Content-type: application/json

这将返回一个带有JSON“键”:“值”对的响应,然后我需要解析以某种方式将键/值(Alan /
72)存储在MAP中。响应为(使用SOAPUI或Postman Rest时):

    {
    "analyzedNames": [
        {
            "alternate": false               
        }
    ],
    "nameResults": [
        {
            "alternate": false,            
            "givenName": "John",           
            "nameCategory": "PERSONAL",
            "originalGivenName": "",
            "originalSurname": "",           
            "score": 72,
            "scriptType": "NOSCRIPT",            
        }
    ]
}

我可以使用SOAPUI或Postman Rest来执行此操作,但是当出现错误时,如何在Java中执行此操作:

****DEBUG main org.apache.http.impl.conn.DefaultClientConnection - Receiving response: HTTP/1.1 500 Internal Server Error****

我的代码是:

    public class NameSearch {

        /**
         * @param args
         * @throws IOException 
         * @throws ClientProtocolException 
         */
        public static void main(String[] args) throws ClientProtocolException, IOException {
            // TODO Auto-generated method stub
            DefaultHttpClient defaultHttpClient = new DefaultHttpClient();          
            StringWriter writer = new StringWriter();

            //Define a postRequest request
            HttpPost postRequest = new HttpPost("http://127.0.0.1:1400/dispatcher/api/rest/search");

            //Set the content-type header
            postRequest.addHeader("content-type", "application/json");
 postRequest.addHeader("Authorization", "Basic ZW5zYWRtaW46ZW5zYWRtaW4=");

            try {

                //Set the request post body
                StringEntity userEntity = new StringEntity(writer.getBuffer().toString());
                postRequest.setEntity(userEntity);

                //Send the request; return the response in HttpResponse object if any
                HttpResponse response = defaultHttpClient.execute(postRequest);

                //verify if any error code first
                int statusCode = response.getStatusLine().getStatusCode();                
            }
            finally
            {
                //Important: Close the connect
                defaultHttpClient.getConnectionManager().shutdown();
            }    
        }    
    }

我们将不胜感激任何帮助(带有一些示例代码,包括要导入的库)。

谢谢


问题答案:

是的,您可以使用Java做到这一点

您需要apache HTTP客户端库http://hc.apache.org/和commons-io

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://localhost/something");


post.setHeader("Referer", "http://localhost/something");
post.setHeader("Authorization", "Basic (with a username and password)");
post.setHeader("Content-type", "application/json");

// if you need any parameters
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("paramName", "paramValue"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));

HttpResponse response = client.execute(post);

HttpEntity entity = response.getEntity();
Header encodingHeader = entity.getContentEncoding();

// you need to know the encoding to parse correctly
Charset encoding = encodingHeader == null ? StandardCharsets.UTF_8 : 
Charsets.toCharset(encodingHeader.getValue());

// use org.apache.http.util.EntityUtils to read json as string
String json = EntityUtils.toString(entity, StandardCharsets.UTF_8);

JSONObject o = new JSONObject(json);


 类似资料:
  • 问题内容: 我试图从下面的curl输出中获取说“ ip”的值: 我在互联网上发现了许多示例来解析curl请求的json输出,并且编写了以下代码,但这似乎并没有给我说“ ip”的值 如果有人可以向我提示我需要添加到代码中以获得“ ip”值的提示,我将不胜感激。 问题答案: 您可以创建结构来模仿json结构,然后对json进行解码。 输出为: 通过将其解码为一个结构,您可以循环遍历任何切片,而不会局限

  • 问题内容: 我是Node开发的新手,我正在尝试使用具有JSON响应的RESTful协议进行服务器端API调用。我已经阅读了API文档和本SO帖子。 我试图从轨道总线中提取的API并以JSON输出返回数据。我对如何使用实际URL中的所有参数和选项发出HTTP GET请求感到困惑。甚至可以通过浏览器或使用“ curl”命令来访问API及其响应。http://developer.cumtd.com/ap

  • 我可以找到许多例子,说明如何让akka-http服务器轻松封送由case类表示的响应实体,只需混合使用SprayJSONSupport/DefaultJSONProtocol,在隐式作用域中提供jsonFormat并在路由DSL中使用complete指令。整齐!

  • 我不知道这里有什么问题。我想发出一个响应二进制数据(例如文件下载)而不是JSON的HTTP请求。 这些行是可以的-但需要JSON。 但我需要将响应定义为不是 JSON。 在这里,我遇到了一个问题。我也尝试了“斑点”。我总是在编译时收到一个类型脚本错误。 类型'{resseType:"string";}'的参数不能分配给类型'{Headers?: HttpHeaders|{[head: string

  • 我正在尝试使用Netty编写RTSP服务器。 现在,客户端发送请求 我想发回以下回复 我应该使用什么来构造http响应。我应该使用HttpResponse还是只使用普通字节数组并将其转换为ByteBuf? 我使用的Netty版本是4.1.5 提前谢谢。

  • 我在使用Jersey客户端(1.11)和JSONConfiguration时遇到了一些问题。要素映射设置为true。我的测试代码如下所示: 在服务器上: 1) 我的网络。xml的POJO映射设置为true。 2) MyFooDTO只是一个如下所示的POJO: 3) MyFooCollectionWrapper如下所示: 我已经验证了服务器在创建Json响应时没有问题。如果将响应类型设置为Strin