gpt4 book ai didi

java - Android:使用基本身份验证无法从 http get 请求中获取 xml

转载 作者:行者123 更新时间:2023-12-01 10:13:55 25 4
gpt4 key购买 nike

我的目标是从 API 获取 xml 。我使用的API uri,包括参数是http://webservices.ns.nl/ns-api-treinplanner?fromStation=Roosendaal&toStation=Eindhoven 。我得到了一个用户名和密码,我认为这可能是基本授权。

我尝试了各种方法,例如使用身份 validator ,格式 http://username:password@webservices.ns.nl/ns-api-treinplanner ,但在大量 SO 搜索结束后,我最终得到了带有基本授权的 setRequestProperty 的内容。

我将代码放入 AsyncTask 中,该任务似乎工作正常,因此我将把 doInBackground 内部的代码放在这里。

由于我第一次得到的 java FileNotFoundException 没有给我太多信息,我找到了如何使用 getErrorStream 来了解更多信息。

            InputStream in;
int resCode;

try {
URL url = new URL("http://webservices.ns.nl/ns-api-treinplanner?fromStation=Roosendaal&toStation=Eindhoven");

String userCredentials = "username:password";
String encoding = new String(android.util.Base64.encode(userCredentials.getBytes(), Base64.DEFAULT));

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty("Authorization", "Basic " + encoding);
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);

try {
resCode = urlConnection.getResponseCode();
if (resCode == HttpURLConnection.HTTP_OK) {
Log.i("rescode","ok");
in = urlConnection.getInputStream();
} else {
Log.i("rescode","not ok");
in = urlConnection.getErrorStream();
}
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(in));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
bufferedReader.close();
return stringBuilder.toString();
}
finally{
urlConnection.disconnect();
}
}
catch(Exception e) {
Log.e("ERROR", e.getMessage(), e);
return null;
}

然后,在onPostExecute中我打印响应,但我得到的响应是

 <?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header></soap:Header>
<soap:Body><soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>006:No customer found for the specified username and password</faultstring></soap:Fault>
</soap:Body></soap:Envelope>

这当然是不对的,在本例中它应该提供完整的 xml 火车行程建议。

我使用浏览器进行了测试,还使用了名为 Postman 的 HTTP 请求工具,它返回了正确的 xml,因此所有 uri、参数、用户名和密码都是正确的。

最佳答案

使用的编码错误。使用的base64编码随机返回中间的空格,添加 encoding = encoding.replaceAll("\\s+",""); 实际上修复了它。

关于java - Android:使用基本身份验证无法从 http get 请求中获取 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36013112/

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