Java 对本地 Apache 服务器的 http 请求 - UnknownHostException
Java http request to local apache server - UnknownHostException
我是 运行 一个 apache 本地服务器,在我的 windows 上有 xampp。
我正在尝试使用一些 Http 请求测试我的 php 后端。
当我尝试连接我的 Java 程序时收到 java.net.UnknownHostException。
我可以交换并下载 chrome 扩展来发出请求,但我想稍后使用 android 应用程序访问我的服务器,用 java 编写,所以我需要工作代码。
服务器是运行,我可以用chrome访问它。
这是我的 java 代码(没有导入和打包):
public class Main {
public static void main(String[] args) {
RemoteConnecter connector = new RemoteConnecter("", "");
ArrayList<String> params = new ArrayList<String>();
params.add("intent=connect");
System.out.println(connector.request(params));
}
}
public class RemoteConnecter {
String password;
String username;
public RemoteConnecter(String username, String password) {
this.password = password;
this.username = username;
}
public String request(ArrayList<String> params) {
String temp = null;
String urllink = "https://www.Jobads43.wpm";
URL url = null;
HttpURLConnection con = null;
try {
url = new URL(urllink);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
//params
String urlParams = "user=" + username + "&password=" + password;
for (int i = 0; i < params.size(); i++) {
urlParams += "&" + params.get(i);
}
byte[] postData = urlParams.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
con.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
con.setUseCaches( false );
DataOutputStream output = new DataOutputStream( con.getOutputStream()/*Exception is thrown here*/);
output.write( postData );
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
temp = sb.toString();
}catch(Exception e) {
e.printStackTrace();
}
return temp;
}
}
这是我的摘录 vhost.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "C:\path-is-correct-but-not-shown"
ServerName Jobads43.wpm
ServerAlias www.JobAds.local
<Directory />
Options FollowSymLinks
AllowOverride All
Require all granted
Order allow,deny
Allow from all
</Directory>
ErrorLog "C:\xampp\htdocs\log"
</VirtualHost>
这是在我的主机中
127.0.0.1 Jobads43.wpm
我很抱歉格式化,我不能做得更好......
在编辑中它的格式更好
你能帮帮我吗?
更新:
当我使用 url "https://Jobads43.wpm" 我得到一个 javax.net.ssl.SSLHandshakeException
当我使用 url "http://Jobads43.wpm" 时它的工作。
但是我需要使用 https 协议来安全地发送我的数据。怎么办?
Stel 1:Create 使用 java 密钥工具的证书。
Step2:配置apache访问https而不是http。为此,请遵循以下 link、
https://gist.github.com/nguyenanhtu/33aa7ffb6c36fdc110ea8624eeb51e69
第 3 步:在 java 证书文件中导入相同的证书(您在第 1 步中创建的),该文件将位于 java 的安全文件夹中。
这将解决握手问题
我是 运行 一个 apache 本地服务器,在我的 windows 上有 xampp。 我正在尝试使用一些 Http 请求测试我的 php 后端。
当我尝试连接我的 Java 程序时收到 java.net.UnknownHostException。 我可以交换并下载 chrome 扩展来发出请求,但我想稍后使用 android 应用程序访问我的服务器,用 java 编写,所以我需要工作代码。
服务器是运行,我可以用chrome访问它。
这是我的 java 代码(没有导入和打包):
public class Main {
public static void main(String[] args) {
RemoteConnecter connector = new RemoteConnecter("", "");
ArrayList<String> params = new ArrayList<String>();
params.add("intent=connect");
System.out.println(connector.request(params));
}
}
public class RemoteConnecter {
String password;
String username;
public RemoteConnecter(String username, String password) {
this.password = password;
this.username = username;
}
public String request(ArrayList<String> params) {
String temp = null;
String urllink = "https://www.Jobads43.wpm";
URL url = null;
HttpURLConnection con = null;
try {
url = new URL(urllink);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
//params
String urlParams = "user=" + username + "&password=" + password;
for (int i = 0; i < params.size(); i++) {
urlParams += "&" + params.get(i);
}
byte[] postData = urlParams.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
con.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
con.setUseCaches( false );
DataOutputStream output = new DataOutputStream( con.getOutputStream()/*Exception is thrown here*/);
output.write( postData );
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
temp = sb.toString();
}catch(Exception e) {
e.printStackTrace();
}
return temp;
}
}
这是我的摘录 vhost.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "C:\path-is-correct-but-not-shown"
ServerName Jobads43.wpm
ServerAlias www.JobAds.local
<Directory />
Options FollowSymLinks
AllowOverride All
Require all granted
Order allow,deny
Allow from all
</Directory>
ErrorLog "C:\xampp\htdocs\log"
</VirtualHost>
这是在我的主机中
127.0.0.1 Jobads43.wpm
我很抱歉格式化,我不能做得更好...... 在编辑中它的格式更好
你能帮帮我吗?
更新:
当我使用 url "https://Jobads43.wpm" 我得到一个 javax.net.ssl.SSLHandshakeException
当我使用 url "http://Jobads43.wpm" 时它的工作。
但是我需要使用 https 协议来安全地发送我的数据。怎么办?
Stel 1:Create 使用 java 密钥工具的证书。 Step2:配置apache访问https而不是http。为此,请遵循以下 link、
https://gist.github.com/nguyenanhtu/33aa7ffb6c36fdc110ea8624eeb51e69
第 3 步:在 java 证书文件中导入相同的证书(您在第 1 步中创建的),该文件将位于 java 的安全文件夹中。
这将解决握手问题