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

HttpClient版本3.1错误

魏宏邈
2023-03-14

我试图传递一个XML文件作为Http POST请求。当我在一个Linux框上使用CURL测试它时,网络服务运行良好,XML格式良好。我试图编写一个Java实用程序来做同样的事情。我在Apache Commons HttpClient库3.1版本中找到了一个示例,下面是我的代码

进口:

import java.io.File;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.FileRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;

代码:

String strURL = "https://localhost/scoring";
String strXMLFilename = "C:\\Users\\Test.xml";
File input = new File(strXMLFilename);
PostMethod post = new PostMethod(strURL);
RequestEntity entity = new FileRequestEntity(input, "text/xml; charset=ISO--");
post.setRequestEntity(entity);
Get HTTP client
HttpClient httpclient = new HttpClient();
try 
{
   int result = httpclient.executeMethod(post);
   System.out.println("Response status code: " + result);
   System.out.println("Response body: ");
   System.out.println(post.getResponseBodyAsString());
} 
finally 
{
post.releaseConnection();
}

我得到一个错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.apache.commons.httpclient.HttpMethodBase.<clinit>(HttpMethodBase.java:104)
at Test.main(Test.java:40)

更新

增加了Commons-logging-1.2。罐子

仍然会出现错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
at org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:220)
at org.apache.commons.httpclient.methods.ExpectContinueMethod.<init>(ExpectContinueMethod.java:93)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.<init>(EntityEnclosingMethod.java:119)
at org.apache.commons.httpclient.methods.PostMethod.<init>(PostMethod.java:106)
at Test.main(Test.java:40)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException

这句话的意思是:

PostMethod post = new PostMethod(strURL);

怎么了?请帮忙。

共有3个答案

越姚石
2023-03-14

我通过导入以下依赖项解决了这个问题

    <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <version>3.1</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
翁鸿远
2023-03-14

您只需要将Apache Commons日志jar添加到您的类路径(如果您使用的是IDE,那么您的项目库)中,就可以从这里下载它。

逄边浩
2023-03-14

您错过了类路径中的apachecommons-logging.jar。下载它并将其添加到类路径中。

更新:现在你需要commons-codec.jar下载并添加它。

 类似资料:
  • 引用acdc31sr1.nsi的内容: ;************************************************************ ;脚本编写: 蓝色网际 ;某些使用了 LogSet 指令的脚本需要使用特别版的 makensis.exe 才能通过编译 ;地址: http://nsis.sourceforge.net/download/specialbuilds/

  • 我已经在我的Ubuntu16.04上安装了JDK1.8,为了完成一些我必须安装JDK1.7的工作,我没有对旧版本做任何操作就安装了它,并且更改了$JAVA_HOME以指向新安装的位置。 echo运行良好,显示新安装的版本为1.7 但当我执行时,它显示的是较早安装的版本,即1.8。 如果我错在什么地方,请纠正我,我需要很好的解释这一点。 谢谢你。这是我的终端机

  • 问题内容: 我正在使用Apache Spark开发Java应用程序。我使用这个版本: 在我的代码中,有一个过渡依赖性: 我将应用程序打包到一个JAR文件中。使用将其部署到EC2实例上时,出现此错误。 此错误清楚地表明已加载了同一Apache httpclient库的较旧版本,因此发生此冲突。 解决此问题的好方法是什么? 由于某种原因,我无法在Java代码上升级Spark。但是,我可以使用EC2集群

  • 问题内容: 如何在HttpClient上更改受支持的TLS版本? 我正在做: 但是当我检查创建的套接字时,它仍然说支持的协议是TLSv1.0,TLSv1.1和TLSv1.2。 实际上,我只希望它针对此特定HttpClient停止使用TLSv1.2。 问题答案: 解决方案是: 不过,这需要org.apache.httpcomponents.httpclient4.3.x。

  • 问题内容: 我正在使用并且需要设置响应编码(由于某种原因,服务器在Content- Type中返回了错误的编码)。我的方法是将响应作为原始字节获取,并以所需的编码转换为。我想知道是否有更好的方法(例如,设置HttpClient)。感谢您的建议。 问题答案: 我认为使用3.x API 没有更好的答案。 HTTP 1.1规范清楚地表明,客户端“必须”遵守响应头中指定的字符集,如果未指定任何字符集,则使