0 0

关于linux下使用httpClient的问题15

有台linux下的服务器和windows下的服务器,先要通过httpclient获取另一服务器的网站的信息,其中windows服务器是正常的,可以获取数据,而linux服务器总是访问出错。
代码如下:
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter("http.protocol.single-cookie-header", true);
httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF8");
// 设置 HttpClient 接收 Cookie,用与浏览器一样的策略
httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);	
// 设置连接协议
Protocol myHTTPS = new Protocol("https",newMySecureProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", myHTTPS);
// 设置连接参数
PostMethod postMethod = new PostMethod(mailserver);
postMethod.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
NameValuePair destination = new NameValuePair("destination",mailServerDes);
NameValuePair flag = new NameValuePair("flags", "0");
NameValuePair forcedownlevel = new NameValuePair("forcedownlevel","0");
NameValuePair trusted = new NameValuePair("trusted", "4");
NameValuePair username = new NameValuePair("username", user);
NameValuePair password = new NameValuePair("password", pw);
NameValuePair isUtf8 = new NameValuePair("isUtf8", "1");
NameValuePair[] FieldArr = new NameValuePair[] { destination, flag,
					forcedownlevel, trusted, username, password, isUtf8 };
postMethod.addParameters(FieldArr);

Cookie[] cookies = httpClient.getState().getCookies();

for (Cookie c : cookies) {
	tmpcookies += c.toString() + ";";
}
postMethod.setRequestHeader("cookie", tmpcookies);
int statusCode = httpClient.executeMethod(postMethod);
postMethod.releaseConnection();



linux下的异常信息:
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)
	at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
	at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506)
	at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
	at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
	at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
	at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
	at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
	at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)


DEBUG日记信息:
2014-06-17 16:58:54,300 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(469)
	enter EntityEnclosingMethod.writeRequestBody(HttpState, HttpConnection)

2014-06-17 16:58:54,300 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.methods.PostMethod.hasRequestContent(135)
	enter PostMethod.hasRequestContent()

2014-06-17 16:58:54,301 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.methods.EntityEnclosingMethod.getRequestContentLength(325)
	enter EntityEnclosingMethod.getRequestContentLength()

2014-06-17 16:58:54,301 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.methods.PostMethod.hasRequestContent(135)
	enter PostMethod.hasRequestContent()

2014-06-17 16:58:54,302 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpConnection.getRequestOutputStream(840)
	enter HttpConnection.getRequestOutputStream()

2014-06-17 16:59:47,091 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(404)
	Closing the connection.

2014-06-17 16:59:47,092 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpConnection.close(1148)
	enter HttpConnection.close()

2014-06-17 16:59:47,092 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpConnection.closeSocketAndStreams(1215)
	enter HttpConnection.closeSockedAndStreams()

2014-06-17 16:59:47,093 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(434)
	Method retry handler returned false. Automatic recovery will not be attempted

2014-06-17 16:59:47,093 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpConnection.releaseConnection(1174)
	enter HttpConnection.releaseConnection()

2014-06-17 16:59:47,094 [DEBUG] ==== http-8080-2: org.apache.commons.httpclient.HttpConnection.releaseConnection(1178)
	Releasing connection back to connection manager.

java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
	at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)


请各位帮忙看下!谢谢!!!!
2014年6月18日 10:22

1个答案 按时间排序 按投票排序

0 0

走的是https吧。加上这一段看看如何?

System.setProperty("jsse.enableSNIExtension", "false");

2014年6月19日 10:43

相关推荐

    Linux下用c语言实现发送http请求

    本文将根据提供的代码片段,详细解析如何在Linux下使用C语言实现HTTP请求的发送,包括必要的头文件、函数定义以及主函数中的关键步骤。 ### 核心知识点 #### 1. 头文件引入 在代码的开头部分,可以看到一系列...

    linux下 构造HTTP client

    下面将详细阐述如何在Linux下使用C语言实现一个简单的HTTP客户端。 首先,你需要理解HTTP的基本工作原理。HTTP协议基于TCP/IP协议,它定义了客户端和服务器之间数据交换的格式和规则。HTTP请求通常由请求行、请求头...

    基于c++11 httpclient

    https://github.com/iEternity/HttpClient github上是基于win的,附件为linux平台,以及android源码环境生成的主机host bin程序,在android 8.1,linux14.04环境均编译通过 内含CMakelists Android.mk文件

    poco c++ linux 可编译使用

    在Linux环境下使用Poco,你需要经历几个关键步骤:解压、编译和安装。下面我们将详细探讨这些步骤以及相关的知识点。 首先,解压Poco库。当你下载了poco-1.9.0的压缩包后,通常是一个.tar.gz或.zip文件,你需要将其...

    详解.NET Core 使用HttpClient SSL请求出错的解决办法

    问题 使用 HTTP Client 请求 HTTPS 的 API 时出现 The certificate cannot be verified up to a trusted certification authority 异常,并且证书已经传入。 下面就是问题代码: public class Program { public ...

    c++mongoose 实现httpserver,httpclient

    在`HttpClient.h`和`HttpClient.cpp`中,我们有HTTP客户端的实现。客户端用于发起HTTP请求,获取服务器的响应。mongoose库也提供了创建HTTP客户端的功能,通过`mg_connect_http()`函数可以建立到服务器的连接,并...

    PB_Json_httpclient_crypto_ftp_20210125.rar

    8. **XP sp3 不支持 HTTPS 的解决办法**:这可能是一个针对Windows XP Service Pack 3操作系统,解决其默认不支持HTTPS连接问题的解决方案,可能涉及到安装额外的补丁或使用特定的工作流程。 9. **Root**:在计算机...

    httpclient.tar.gz

    linux c http/https post GET 支持HTTPS

    Linux下海康监控JAVA源码demo

    在Linux环境下,开发和操作海康监控设备通常涉及到与硬件交互、网络通信、视频流处理以及数据解析等技术。此“Linux下海康监控JAVA源码demo”提供了一个基于Java的示例,使得开发者能够在Linux系统中直接进行相关...

    Http client 4.2.2 jar包 for Linux/Unix

    文件名:httpcomponents-client-4.2.2-bin.tar.gz ...commons-codec-1.6.jar commons-logging-1.1.1.jar ...httpclient-4.2.2.jar httpclient-cache-4.2.2.jar httpcore-4.2.2.jar httpmime-4.2.2.jar

    最新版linux jdk-11.0.10_linux-x64_bin.tar.gz

    "jdk-11.0.10_linux-x64_bin.tar.gz" 文件是一个压缩包,使用了tar和gzip两种工具进行压缩,这是在Linux环境下常见的文件打包方式。 首先,我们来了解一下JDK的核心组成部分: 1. **Java编译器** (javac):它将源...

    jdk-11.0.2_linux-x64_bin.tar.gz

    2. 解压:使用tar命令解压文件,例如`tar -zxvf jdk-11.0.2_linux-x64_bin.tar.gz`,这会在当前目录下创建一个名为“jdk-11.0.2”的文件夹。 3. 移动:将解压后的目录移动到/usr/lib/jvm或自定义的Java安装目录,如`...

    jdk-11.0.16.1-linux-x64-bin.tar

    这个文件是Oracle JDK的特定版本,用于在Linux环境下开发和运行Java应用程序。 Java JDK是Java编程的基础,它包含了Java运行环境(JRE)、编译器(javac)、调试器(jdb)以及其他工具,如jar打包工具和javadoc文档...

    JDK17-Linux-Arm64

    6. **弃用的HTTP客户端API(Deprecated HTTP Client API)**:JDK9引入的HttpURLConnection被标记为过时,鼓励开发者使用更现代的HttpClient API。 7. **增强的垃圾收集器(Garbage Collectors)**:包括ZGC和...

    JDK11(内含win版和linux版)

    此版本的JDK针对Windows和Linux操作系统提供了支持,这意味着开发者可以在这两种主流操作系统上使用JDK11进行Java开发工作。** **一、JDK11新特性** 1. **模块化系统(Project Jigsaw)**:JDK11引入了Java平台...

    jdk-10_linux-x64

    JDK 10引入了一个新的标准HTTP客户端API,位于`java.net.http`包下,替代了之前的`sun.net.www.http.HttpClient`,提供更现代、高效且易于使用的HTTP/1.1和HTTP/2支持。 - **Garbage Collection Interface (JEP ...

    JDK11 Linux版-CSDN下载

    9. **Java Flight Recorder**:这是一个低开销的诊断和监控工具,可以收集关于JVM和应用程序的详细信息,帮助开发者分析性能问题。 10. **Java Mission Control**:与Java Flight Recorder配合使用,提供了强大的...

    海康威视JavaDemo_Linux64.zip

    在Linux环境下,这个Java Demo可能包含了必要的库文件(.jar)以及示例源代码(.java)。开发者可以通过编译源代码并运行来查看演示效果。海康威视的SDK可能会提供如视频流获取、图像捕获、云台控制、报警处理等功能...

    jdk11官网下载 linux+windows

    3. **移动到指定目录**:通常,我们会把JDK安装到`/usr/lib/jvm`目录下,为此,需要使用`sudo`权限: ``` sudo mv jdk-11.0.10 /usr/lib/jvm/ ``` 4. **设置环境变量**:为了让系统识别JDK11,需要在`~/.bashrc`...

    基于java 的 linux 终端翻译软件.zip

    这种软件对于Linux用户来说非常有用,因为它允许他们在没有图形用户界面(GUI)的情况下进行翻译操作,这对于远程服务器或自动化脚本尤其方便。 Java是一种跨平台的编程语言,意味着编写的代码可以在任何支持Java的...

Global site tag (gtag.js) - Google Analytics