为啥服务器用不了httpclient
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥服务器用不了httpclient相关的知识,希望对你有一定的参考价值。
代码在本地开发环境正常,但上传到了服务器端后,就报错了,不知为什么,请高人指点。报错如下:
二月 06, 2014 11:35:22 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: I/O exception (javax.net.ssl.SSLProtocolException) caught when processing request: handshake alert: unrecognized_name
二月 06, 2014 11:35:22 下午 org.apache.commons.httpclient.HttpMethodDirector executeWithRetry
INFO: Retrying request
二月 06, 2014 11:35:22 下午 org.apache.commons.httpclient.HttpMethodDirector exe
cuteWithRetry
INFO: I/O exception (javax.net.ssl.SSLProtocolException) caught when processing
request: handshake alert: unrecognized_name
二月 06, 2014 11:35:22 下午 org.apache.commons.httpclient.HttpMethodDirector exe
cuteWithRetry
INFO: Retrying request
二月 06, 2014 11:35:22 下午 org.apache.commons.httpclient.HttpMethodDirector exe
cuteWithRetry
INFO: I/O exception (javax.net.ssl.SSLProtocolException) caught when processing
request: handshake alert: unrecognized_name
二月 06, 2014 11:35:22 下午 org.apache.commons.httpclient.HttpMethodDirector exe
cuteWithRetry
INFO: Retrying request
com.myneed.shop.WxService.wxLogin:javax.net.ssl.SSLProtocolException: handshake
alert: unrecognized_name
可能你本地是jdk1.6但是服务器端是 1.7
这其实算是一个bug,解决方案:
服务器端保证是1.6
在被调用方的apache设置里面加上ServerAlias 例子:
ServerName mydomain.com
ServerAlias www.mydomain.com
在代码的头部加上
从上到下都试一下
"在被调用方的apache设置里面加上ServerAlias 例子"
是指在别人的网站里面设置吗?
是指“系统属性”里面的环境变量吗?
追答JAVA运行环境中的。不是系统中的。
追问发现只要用了https,就容易出问题
为啥 System.Net.Http HttpClient 对我的请求 URL 进行编码?
【中文标题】为啥 System.Net.Http HttpClient 对我的请求 URL 进行编码?【英文标题】:Why is System.Net.Http HttpClient encoding my request URL?为什么 System.Net.Http HttpClient 对我的请求 URL 进行编码? 【发布时间】:2016-03-21 14:55:33 【问题描述】:我使用 System.Net.Http 中的 HttpClient 向 Web 服务发出请求,如下所示:
using (var client = new HttpClient())
using (var response = client.GetAsync(url).Result)
var result = response.Content.ReadAsStringAsync().Result;
我有一个沙盒应用程序和一个实时应用程序。沙盒应用程序具有相同的代码(在共享存储库中),可以正常工作,但是当在实时应用程序中调用 client.GetAsync(url).Result
时,由于某种原因,Fiddler 向我显示请求的 URL 已被编码,这会弄乱请求。
请求的 URL 应该如下所示:
/advert?paginate=1&page=1&language=en&filters[updated_at][ge]=2016-03-21%2012:19:05
但最终看起来像这样:
/advert?paginate=1&page=1&language=en&filters%5Bupdated_at%5D%5Bge%5D=2016-03-21%2012:19:05
知道为什么吗?谢谢
注意我在 .NET Framework 4.5 中使用来自 Nuget 的 Microsoft.Net.Http 库
【问题讨论】:
en.wikipedia.org/wiki/Percent-encoding 第二个 URL 是代表第一个 URL 的完全合法的方式。听起来,如果有的话,接收请求的服务在正确编码的 URL 方面存在问题。 @CSharpie:我理解 URL 编码的意义,但是(特别是)方括号的意外编码是我感到困惑的地方。特别是因为相同的代码在另一个项目中的工作方式不同。 @JLRishe:不幸的是,服务对第一个请求的响应很好,但对第二个请求“没有结果”。我认为这与他们的应用程序从 URL 解析搜索参数的方式有关。 您是否尝试过添加类似this 答案建议的帖子参数? 【参考方案1】:请对您的问题非常具体:
你用的Microsoft.Net.Http版本是什么? 你在.NET版本下编译什么?原来你是在 .NET 4.0 下编译的,我想说这是一个错误,因为行为与 .NET Fx 4.5 System.Http 不同
您可以通过在 Uri 类中将 dontEscape
设置为 true 来修复它:
var url = new Uri(@"http://google.com/advert?paginate=1&page=1&language=en&filters[updated_at][ge]=2016-03-21%2012:19:05", dontEscape: true);
【讨论】:
'dontEscape' 现已过时 @Lance 你能确认这不是最新的 .NET FX / Core 的问题吗? 看起来它在 Core 3.1 中仍然过时 docs.microsoft.com/en-us/dotnet/api/…以上是关于为啥服务器用不了httpclient的主要内容,如果未能解决你的问题,请参考以下文章
今天装了一个apmserv5.2.6。配置了虚拟主机~hosts映射了域名,能PING到IP。但是浏览器用域名访问不了,求解