Использование API, который имеет безопасное имя пользователя и пароль, т.е. аутентификацию
Как использовать IBM Cast Iron API в мобильном приложении.API имеет аутентификацию, такую как имя пользователя и пароль (требуется авторизация 401). Проблема здесь заключается в том, как аутентифицировать API в javascript с помощью вызова Ajax.
Это мой код:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(document).ready(function () {
$("#bSubmit").click(function () {
alert("Button Clicked");
var xmlString;
var username = 'myusername';
var password = 'mypassword';
$.ajax({
url: 'MYURL',
crossDomain: true,
headers: {
"Authorization": "Basic " + btoa(username + ":" + password)
},
type: "POST", //This is what you should chage
dataType: "xml",
contentType: "application/xml; charset=utf-8",
}).done(function (response) {
alert("Sucess"+response);
xmlString = (new XMLSerializer()).serializeToString(response);
$("#displayout").html(xmlString);
}).fail(function (request, textStatus, errorThrown) {
alert("wrong");
alert(textStatus + " : " + errorThrown.toString());
});
});
});
</script>
</head>
<body>
<input type="text" name="1" id="txt1">
<input type="submit" name="b" value="Submit" id="bSubmit">
<div id="displayout">
</div>
</body>
Я добавил CORS фильтр в Firefox и IE. Это нормально работает в IE. Но это не работает в Firefox и Chrome.
В IE: я изменил настройку по следующей ссылке. Это работает для меня.
В консоли Firefox это выглядит так:
Блокировка перекрестного запроса: та же политика происхождения запрещает чтение удаленного ресурса по адресу https: // MYURL. Это можно исправить, переместив ресурс в тот же домен или включив CORS.
В консоли Chrome это выглядит так:
ОПЦИИ https: // MYURL 401 (требуется авторизация)
XMLHttpRequest не может загрузить https: // MYURL. Неверный код состояния HTTP 401
Не могли бы вы помочь мне.
1 ответ
Используя Java, я получил ответ. Но использование вызова AJAX все равно является той же ошибкой, что и проблема авторизации.
Код на основе Java:
public class Sample {
public static void main(String[] args) throws Exception {
final String userid = "username";
final String pwd = "password";
String addressXML="";
String url="URL";
//Create an instance of HttpClient.
final HttpClient client = new HttpClient();
//com.sun.jersey.api.client.ClientResponse response;
final URL uri = new URL(url);
final GetMethod getmethods = new GetMethod(url);
AuthScope authscope = new AuthScope(uri.getHost(), uri.getPort());
Credentials defaultcreds = new UsernamePasswordCredentials(userid, pwd);
client.getState().setCredentials(authscope, defaultcreds);
getmethods.setDoAuthentication(true);
client.getParams().setAuthenticationPreemptive(true);
final int responseCode = client.executeMethod(getmethods);
if (responseCode == 200) {
InputStream in = getmethods.getResponseBodyAsStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
}
addressXML = out.toString();
System.out.println("Resultent Data" + addressXML); //Prints the string content read from input stream nodes
reader.close();
} else {
throw new RuntimeException("Failed : HTTP error code : " + responseCode + " address rs service error!");
}
}}