gpt4 book ai didi

sockets - 通过 SSL/HTTPS REST Api 发布 Android 正在响应 400 错误请求

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:40 25 4
gpt4 key购买 nike

在我的应用程序中,我想从使用 REST 服务的远程服务器中的 android 应用程序 XML 数据发布。我的代码如下:

 String url = "api.example.com";
int port = 443;
String query = "<?xml version='1.0' encoding='UTF-8'?><request><client><name>APIappDevAccount</name><password>123456</password></client><user><name>foyzulkarim</name><password>123456</password><groupId>12345</groupId></user></request>";
Socket socket = null;
try {
socket = new Socket(url,port);
} catch (UnknownHostException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
PrintStream pw = null;
try {
pw = new PrintStream(socket.getOutputStream());

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pw.print("POST api.example.com/rest/rest/user");
pw.print("Content-Type: application/xml");
pw.print("Content-Length:" + query.length());
pw.print(query);
System.out.println("hello foysal.");
//get result
String l = null;
String text="";

try {
while ((l=br.readLine())!=null) {
System.out.println(l);
text+=l;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pw.close();
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

但该服务器支持 SSL/HTTPS 协议(protocol),因此我收到以下 400 错误请求作为响应。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>400 Bad Request</title></head><body><h1>Bad Request</h1><p>Your browser sent a request that this server could not understand.<br />Reason: You're speaking plain HTTP to an SSL-enabled server port.<br />Instead use the HTTPS scheme to access this URL, please.<br /><blockquote>Hint: <a href="https://api.example.com/"><b>https://api.example.com/</b></a></blockquote></p></body></html>

如果我像下面这样使用 SSLSocketFactory

SocketFactory socketFactory = SSLSocketFactory.getDefault();
Socket socket = null;

try {
socket = socketFactory.createSocket(url, port);

我遇到了异常

javax.net.ssl.SSLException: Not trusted server certificate
java.security.cert.CertPathValidatorException: TrustAnchor for CertPath not found.

在线

br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

我的问题是,在上述情况下如何通过 SSL 从 Android 应用程序发布数据?我想我们很多人都面临这个问题,所以我请求你给我/我们一些详细的答案。干杯。

最佳答案

未知数太多 :-)

在您可以控制的测试服务器上尝试纯 HTTP。我的直觉是它会给出同样的错误。例如,您似乎没有在 HTTP header 和正文之间放置空行。

你为什么要重新实现 HTTP?不要告诉我没有可以在任何平台上使用的 API 或库?通常有 java.net.HttpUrlConnection 或 Apache HttpClient。

编辑:

嘿,看看谷歌带来了什么:http://developer.android.com/reference/android/net/http/AndroidHttpClient.html

关于sockets - 通过 SSL/HTTPS REST Api 发布 Android 正在响应 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6664733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com