当前位置: 首页 > 知识库问答 >
问题:

在HttpClient-Java中发送POST请求时,收到400个错误请求

田志
2023-03-14
package com.apex.customer.service;

public class CustServicePostTest {

    public static void main(String[] args) throws ClientProtocolException, IOException {

        String url = "http://www.thomas-bayer.com/sqlrest/CUSTOMER/102";
        //create the http client
        HttpClient client = HttpClientBuilder.create().build();
        //create the post message
        HttpPost post = new HttpPost(url);

        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("ID", "102"));
        urlParameters.add(new BasicNameValuePair("FIRSTNAME", "Apex"));
        urlParameters.add(new BasicNameValuePair("LASTNAME", "Consultancy"));
        urlParameters.add(new BasicNameValuePair("STREET", "Shell Blvd"));
        urlParameters.add(new BasicNameValuePair("CITY", "Fremont"));

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);

        System.out.println(response.getStatusLine().getStatusCode());
        System.out.println("Parameters : " + urlParameters);
        System.out.println("Response Code: " + response);
        System.out.println(response.getStatusLine().getReasonPhrase());

    }

}

我正在寻找200 OK请求。

共有1个答案

鲁宏爽
2023-03-14

这里的问题很少出错:

  • 首先与输入格式有关。您使用的代码试图映射键和值,但正如我在本指南中看到的,它希望以纯文本的XML格式作为输入。
  • 第二个错误是试图在现有ID上发布。在本例中,要创建资源,应该使用http://www.thomas-bayer.com/sqlrest/customer/

因此,在本例中,为了使其发挥作用,请尝试如下所示:

        String url = "http://www.thomas-bayer.com/sqlrest/CUSTOMER/";
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(url);

        String xml = "<resource>";
        xml += "<ID>102</ID>";
        xml += "<FIRSTNAME>Apex</FIRSTNAME>";
        xml += "<LASTNAME>Consultancy</LASTNAME>";
        xml += "<STREET>Shell Blvd</STREET>";
        xml += "<CITY>Fremont</CITY>";
        xml += "</resource>";

        post.setEntity(new StringEntity(xml));
        HttpResponse response = client.execute(post);

        System.out.println(response.getStatusLine().getStatusCode());
        System.out.println("Response Code: " + response);
        System.out.println(response.getStatusLine().getReasonPhrase());
curl -X POST  http://www.thomas-bayer.com/sqlrest/PRODUCT/ -d '<resource><ID>103</ID><NAME>X</NAME><PRICE>2.2</PRICE></resource>'
 类似资料:
  • 通过邮递员API正在工作,但相同的API不与改造工作,我收到400个错误的改造要求 返回true或false的endpoint@POST(“/emrmegax/api/allscript/saveappointment”)调用saveappointment(@Header(“x-auth-token”)字符串header1,@Body字符串yy);

  • 我正在尝试构建一个JSON以与POST一起发送,但似乎我做错了什么: 这样,我得到了400错误请求错误,它根本不会触发REST。 相反,如果我把硬编码字符串如下,它工作得很好: 有什么想法吗? 谢谢,

  • 我正在为一个项目使用Hackerrank API。查看官方文档,点击这里! 在他们的网站上有一个使用UNIREST的例子, 由于我使用的是axios,所以我将其转换为类似的axios代码,如下所示: 我希望这只适用于示例中所示的示例,但它给我带来了以下错误: 请求失败,状态代码为400 错误:请求失败,状态代码为400 在createError(createError.js:16) 在sett(s

  • 我正试图从我的android向IIS Web服务发送一个包含一类数据的图像。(C#) 问题是我得到。 图像正在被编码为< code>Base64。然后与其余的类元素一起放入< code>json中。 我猜想Base64在Json中是无效的。因此服务器无法理解。如果我将字符串设置为,则可以接受帖子。 所以问题是,如何使我的在数组中有效?(我尝试了URL.Encode,但没有成功)。 或者应该如何从a

  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 我试图访问accounts.google.com,从使用HTTP post请求接收的授权代码中获取令牌。 请求: 下面是我正在使用的文档:在web服务器收到授权代码后,它可以将授权代码交换为访问令牌和刷新令牌。此请求是一个HTTPs post,包括以下参数: 字段描述代码从初始请求返回的授权代码client_id在应用程序注册过程中获得的client_secret在应用程序注册过程中获得的客户端秘