13: 16: 08,738 ОШИБКА [stderr] (задача по умолчанию 26) java.io.IOException: сервер вернул код ответа HTTP: 401 для URL: https://cs5.salesforce.com/services/apexrest/event/search?type=init

@GET
@Path("/testDeployment")
@Produces(MediaType.TEXT_PLAIN)
public String testDeployment() {
        URL url = new URL(restURL);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Authorization", "Bearer "+sessionId);

        System.out.println("sessionId>>>> "+sessionId);
        System.out.println("restURL>>>> "+restURL);
        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
            response += output; 
        }

        conn.disconnect();
}

Но я получаю ошибку

Сервер вернул код ответа HTTP: 401 для URL: https: //cs5.salesforce .com / services / apexrest / event / search? type = init

Используйте этот шаблон, чтобы получить "массив дат:"

13: 16: 08,747 ОШИБКА [stderr] (задача по умолчанию 26) на sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (HttpURLConnection.java:1840)

1
Pankaj Mehra 13 Май 2016 в 10:47

3 ответа

Лучший ответ

Я добавил заголовок авторизации:

Conn.setRequestProperty («Авторизация», String.format («Носитель% s», sessionId));

Но похоже, что заголовок нужно отформатировать, я обновил строку:

Какой бы URL-адрес вы ни нажимали, авторизован, поэтому необходимо использовать авторизацию в заголовке, тогда вы получите вывод как

И это сработало, я думаю, в Интернете его нужно отформатировать, а для Java-приложения приведенный выше код работает хорошо

0
Natasha Kurian 18 Авг 2020 в 12:36

Ниже приводится выдержка из определения определений кода состояния HTTP, что может помочь вам решить проблему:

401 не авторизован

У меня есть API-интерфейс java rest, размещенный на JBoss, который вызывает другой веб-сервис отдыха:

2
Community 20 Июн 2020 в 09:12

и если вы используете Spring Rest Controller, используйте этот ...

1. если вы используете джерси, используйте синтаксис, как показано ниже: -

try{
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8085/getStepsCount");
webResource.setProperty("Content-Type", "application/json;charset=UTF-8");
String authorization = "PASTE_KEY_HERE";
webResource.setProperty("Authorization", authorization);
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add("json", js);
String jsonString = webResource.get(String.class);}catch (Exception e){System.out.println (e.getMessage());}

Запрос требует аутентификации пользователя. Ответ ДОЛЖЕН включать поле заголовка WWW-Authenticate (раздел 14.47), содержащее запрос, применимый к запрошенному ресурсу. Клиент МОЖЕТ повторить запрос с подходящим полем заголовка авторизации (раздел 14.8). Если запрос уже включал учетные данные авторизации, то ответ 401 указывает, что в авторизации для этих учетных данных отказано. Если ответ 401 содержит тот же вызов, что и предыдущий ответ, и пользовательский агент уже пытался аутентифицироваться хотя бы один раз, то пользователю СЛЕДУЕТ представить объект, который был указан в ответе, поскольку этот объект может включать в себя релевантную диагностическую информацию. Аутентификация доступа HTTP объясняется в разделе «Аутентификация HTTP: базовая и дайджест-аутентификация доступа».

@RequestMapping(value = "/getStepsUsingPostRequest", method = RequestMethod.POST)
public ResponseEntity<Object> getDiscountUsingPost(
        @RequestBody MemberStepsDto memberStepsDto) {
    try{
    final String uri = "http://localhost:8085/getStepsCount";
    RestTemplate restTemplate = new RestTemplate();
    System.out.println("starting.......");
    String json = "{\"memberId\": \""+memberStepsDto.getMemberId()+"\",\"startDate\": \""+memberStepsDto.getStartDate()+"\",\"endDate\": \""+memberStepsDto.getEndDate()+"\"}";
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON); 
    HttpEntity<String> entity = new HttpEntity<String>(json,headers);

    String answer = restTemplate.postForObject(uri, entity, String.class);
    System.out.println("String : " + answer);
    }
    catch(Exception ex){
        ex.printStackTrace();
    }
    return new ResponseEntity<Object>(new String("Fetched Successfully"),HttpStatus.OK);
}
0
Shahzad Hussain 20 Фев 2017 в 11:10