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

Apache HTTP客户端400错误

罗毅
2023-03-14

我试图自动化Web服务,并以字符串的形式传递XML,然后将其转换为字符串实体并设置实体。但我不知道为什么会抛出400错误。我是WebServices Automation的新手,请在这方面帮助我。

以下是我的代码:

package com.WebServices.Automation;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.junit.Assert;
import org.junit.Test;

public class HTTPClientA {

    static String url = "http://www.dneonline.com/calculator.asmx?wsdl";

    String xml = "\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
            "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tem=\"http://tempuri.org/\">\r\n" + 
            "   <soap:Header/>\r\n" + 
            "   <soap:Body>\r\n" + 
            "      <tem:Add>\r\n" + 
            "         <tem:intA>10</tem:intA>\r\n" + 
            "         <tem:intB>20</tem:intB>\r\n" + 
            "      </tem:Add>\r\n" + 
            "   </soap:Body>\r\n" + 
            "</soap:Envelope>";
    @Test
    public void main() throws ClientProtocolException, IOException
    {

        StringEntity stringEntity = new StringEntity(xml);
        HttpPost post = new HttpPost(url);
        post.setEntity(stringEntity);
        HttpClient client = HttpClientBuilder.create().build();
        post.setHeader("Content-Type", "text/xml; charset=utf-8");
        post.setHeader("SOAPAction", "http://tempuri.org/Add");
        HttpResponse res = client.execute(post);

        int actualresponse = res.getStatusLine().getStatusCode();
        System.out.println(actualresponse);
        try
        {
        Assert.assertEquals(actualresponse, 200);
        }
        catch (Exception e) {
            // TODO: handle exception
        } 
        HttpEntity entity = res.getEntity();

            String strResponse = null;
            if (entity != null) {
                strResponse = EntityUtils.toString(entity);
                System.out.println(strResponse);
            }
    }

}

共有1个答案

邴俊民
2023-03-14

您的 XML 无效,它以双引号而不是

  String xml = "<?xml version ... –

 类似资料:
  • 我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们

  • 我正在尝试对客户端凭据流进行身份验证,但一直返回错误400。我查看了可用的API,但看不出我做错了什么。如果有人能给我一个正确的方向,那太棒了。谢谢

  • 我读了很多关于正确的超文本传输协议状态代码返回客户端请求错误的帖子和文章。其他人建议使用400,因为它在RFC 7231中被重新定义了,尽管我不确定给出的例子是否涵盖了我脑海中所有的客户端错误,因为这些例子是语法性的。 400(错误请求)状态代码表示服务器无法或将不会处理请求,原因是被认为是客户端错误(例如,格式错误的请求语法、无效的请求 消息帧或欺骗性请求路由)。 我确实在rfc 7231的附录

  • 在我的代码中,我试图反复构建一个客户端,并向远程endpoint发送一个输入流: 输入流包含消息的xml正文。我注意到在第一次迭代中。。。请求成功第二次迭代响应为400错误请求。。。第三个400错误请求。。。。等等。。。 如果我将输入流更改为字符串...获取真实的xml并用PUT方法发送它。 有什么区别?为什么它可以处理字符串而不能处理输入流?(似乎inputstream在第一次迭代后会发生变化)

  • 在此处为客户端凭据流使用Spotify文档: 我能够在谷歌应用程序脚本(Javascript)中创建API请求。 我对两件事感到困惑,请能够回答这两件事。 1). Spotify文档声明在授权标头中的客户端凭据之前输入“Basic”。 然而,当我运行这段代码时,我得到了这个错误 如果我在使用客户端凭据流,为什么它认为我在使用承载令牌?(同样,如果我将身份验证更改为Bearer,我会收到401错误“

  • 在后端,我进行了调试,并收到了请求,它根据客户机上设置的令牌查找用户,但随后什么也不做,只在我试图从应用程序发送时返回给我400,在graphiql浏览器上。 我错过了什么?非常感谢。