首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Java发送带有基本身份验证和请求正文的HTTP POST请求

用Java发送带有基本身份验证和请求正文的HTTP POST请求
EN

Stack Overflow用户
提问于 2018-10-11 05:45:51
回答 1查看 3.9K关注 0票数 0

我正在尝试通过Java向ServiceNow REST API发送一个HTTP请求并创建一个事件。

我在Postman中使用了: URL:POST https://<domain>.service-now.com/api/now/table/em_event

正文:

代码语言:javascript
复制
{
    "source":"Postman",
    "node":"Codys Mac",
    "type":"Test",
    "resource":"Test",
    "metric_name":"Testing",
    "event_class":"Test",
    "severity":"4",
    "description":"This is a test event, created from REST API.",
}

而且它工作正常,没有问题。

但是在Java中,我除了问题什么都没有。

我发现im尝试遵循的最简单的示例是:https://kodejava.org/how-do-i-send-an-http-post-request/

我的代码如下:

代码语言:javascript
复制
    public void post(){
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(serviceNowURL);

        List<NameValuePair> arguments = new ArrayList<>();
        arguments.add(new BasicNameValuePair("source", "Sample Producer"));
        arguments.add(new BasicNameValuePair("node", "Codys Mac"));
        arguments.add(new BasicNameValuePair("type", "Test Event Type"));
        arguments.add(new BasicNameValuePair("resource", "Test Event Resource"));
        arguments.add(new BasicNameValuePair("metric_name", "Test Event Metric Name"));
        arguments.add(new BasicNameValuePair("event_class", "Test Event Class"));
        arguments.add(new BasicNameValuePair("sevrity", "5"));
        arguments.add(new BasicNameValuePair("description", "This is a test event, created by SampleProducer App usign REST API."));

        try{
            String encoding = Base64.getEncoder().encodeToString((username.concat(":").concat(password)).getBytes("UTF-8"));

            post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
            post.setHeader(HttpHeaders.ACCEPT, "application/json");
            post.setHeader(HttpHeaders.AUTHORIZATION, "Basic " + encoding);
            post.setEntity(new UrlEncodedFormEntity(arguments));
            HttpResponse response = client.execute(post);
        }
        catch(Exception e){
            System.out.println(ExceptionUtils.getRootCauseMessage(e));
        }
    }

但是无论何时我运行它,我都会在java.lang.NoSuchFieldError: INSTANCEHttpClientBuilder.create().build()的第一行遇到一个异常,我不知道为什么。

有没有人知道我做错了什么,或者我可以用其他方法来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-01-21 14:01:43

代码语言:javascript
复制
        CloseableHttpClient httpclient = HttpClients.createDefault();

这对我很有效,您不必使用连接管理器打开和关闭连接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52749220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档