Java 我得到一个;证书中的主机名没有';“t匹配”;尝试连接到我的Android应用程序中的助手网站时出错
下午好,正如标题中所说,我无法在我的Android应用程序中连接到我的caddy网站上的子域。我正在将该应用程序的后端从Heroku迁移到我自己的digitalocean droplet,并且该应用程序在使用Heroku时可以正常工作 我得到的错误消息如下:Java 我得到一个;证书中的主机名没有';“t匹配”;尝试连接到我的Android应用程序中的助手网站时出错,java,android,caddy,caddyfile,Java,Android,Caddy,Caddyfile,下午好,正如标题中所说,我无法在我的Android应用程序中连接到我的caddy网站上的子域。我正在将该应用程序的后端从Heroku迁移到我自己的digitalocean droplet,并且该应用程序在使用Heroku时可以正常工作 我得到的错误消息如下: W/System.err: javax.net.ssl.SSLException: hostname in certificate didn't match: <sub.domain.com> != <domain.com
W/System.err: javax.net.ssl.SSLException: hostname in certificate didn't match: <sub.domain.com> != <domain.com> OR <domain.com>
W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185)
W/System.err: at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95)
W/System.err: at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:388)
W/System.err: at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
W/System.err: at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err: at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
我可以在我的web浏览器中连接到子域,所以我真的不知道为什么会发生这种情况。我并不太热衷于禁用主机名验证,所以我想知道是否有办法在Caddy端修复它。因此,我可以通过切换到okhttp库来解决这个问题 渐变依赖项:
dependencies {
compile group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: '3.8.0'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
}
课程的新版本:
/**
* Created by luke on 8/29/2016.
*/
import android.net.Uri;
import org.apache.http.NameValuePair;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Request.Builder;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class HttpPostRequest {
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
InputStream content;
String responseText;
int code;
HttpPostRequest(String url, Map<String, String> valuePair) {
try {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging).build();
Uri uri = Uri.parse(url);
HttpUrl.Builder httpUrlBuilder = new HttpUrl.Builder();
httpUrlBuilder.host(uri.getHost());
httpUrlBuilder.scheme(uri.getScheme());
ArrayList<String> paths = new ArrayList<>(uri.getPathSegments());
for (String path : paths) {
httpUrlBuilder.addPathSegment(path);
}
Builder builder = new Request.Builder();
FormBody.Builder formBuilder = new FormBody.Builder();
ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();
for (Map.Entry<String, String> entry : valuePair.entrySet()) {
formBuilder.add(entry.getKey(), entry.getValue());
}
builder.url(httpUrlBuilder.build());
builder.post(formBuilder.build());
Response response = client.newCall(builder.build()).execute();
code = response.code();
responseText = response.body().string();
responseText = responseText != null ? responseText : "";
} catch (Exception exc) {
exc.printStackTrace();
if (responseText != null) {
System.out.println(responseText);
}
}
}
}
/**
*由luke于2016年8月29日创建。
*/
导入android.net.Uri;
导入org.apache.http.NameValuePair;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.Map;
导入okhttp3.FormBody;
导入okhttp3.HttpUrl;
导入okhttp3.MediaType;
导入okhttp3.OkHttpClient;
导入okhttp3.请求;
导入okhttp3.Request.Builder;
导入okhttp3.响应;
导入okhttp3.logging.HttpLoggingInterceptor;
公共类HttpPostRequest{
公共静态最终媒体类型JSON
=MediaType.parse(“application/json;charset=utf-8”);
输入流内容;
字符串响应文本;
int代码;
HttpPostRequest(字符串url,映射值对){
试一试{
HttpLoggingInterceptor logging=新的HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient客户端=新建OkHttpClient.Builder().addInterceptor(logging.build();
Uri=Uri.parse(url);
HttpUrl.Builder httpUrlBuilder=新的HttpUrl.Builder();
httpUrlBuilder.host(uri.getHost());
httpUrlBuilder.scheme(uri.getScheme());
ArrayList路径=新的ArrayList(uri.getPathSegments());
用于(字符串路径:路径){
httpUrlBuilder.addPathSegment(路径);
}
Builder=newrequest.Builder();
FormBody.Builder formBuilder=新的FormBody.Builder();
ArrayList nameValuePairs=新的ArrayList();
对于(Map.Entry:valuePair.entrySet()){
添加(entry.getKey(),entry.getValue());
}
url(httpUrlBuilder.build());
builder.post(formBuilder.build());
响应=client.newCall(builder.build()).execute();
code=response.code();
responseText=response.body().string();
responseText=responseText!=null?responseText:;
}捕获(异常exc){
exc.printStackTrace();
if(responseText!=null){
System.out.println(responseText);
}
}
}
}
试试看,您可能会得到更多帮助。您可以在浏览器中连接到domain.com吗?这一行中url
的值是多少final-HttpPostHC4 post=new-HttpPostHC4(url)代码>@Tobyalen嘿,我可以连接到domain.com,在我的浏览器中没有问题。然而,我最终通过使用okhttp库解决了这个问题。对不起,浪费了你的时间。也许可以用你所做的回答你自己的问题(如使用不同的图书馆)@TobyAllen好主意,我刚刚回答了。
dependencies {
compile group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: '3.8.0'
compile 'com.squareup.okhttp3:okhttp:3.8.0'
}
/**
* Created by luke on 8/29/2016.
*/
import android.net.Uri;
import org.apache.http.NameValuePair;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Request.Builder;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class HttpPostRequest {
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
InputStream content;
String responseText;
int code;
HttpPostRequest(String url, Map<String, String> valuePair) {
try {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(logging).build();
Uri uri = Uri.parse(url);
HttpUrl.Builder httpUrlBuilder = new HttpUrl.Builder();
httpUrlBuilder.host(uri.getHost());
httpUrlBuilder.scheme(uri.getScheme());
ArrayList<String> paths = new ArrayList<>(uri.getPathSegments());
for (String path : paths) {
httpUrlBuilder.addPathSegment(path);
}
Builder builder = new Request.Builder();
FormBody.Builder formBuilder = new FormBody.Builder();
ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();
for (Map.Entry<String, String> entry : valuePair.entrySet()) {
formBuilder.add(entry.getKey(), entry.getValue());
}
builder.url(httpUrlBuilder.build());
builder.post(formBuilder.build());
Response response = client.newCall(builder.build()).execute();
code = response.code();
responseText = response.body().string();
responseText = responseText != null ? responseText : "";
} catch (Exception exc) {
exc.printStackTrace();
if (responseText != null) {
System.out.println(responseText);
}
}
}
}