404 Ошибка доступа к https URL - Java, но работает нормально с POSTMAN или SOAPUI - PullRequest
0 голосов
/ 20 ноября 2018

Изменить 21 ноября: Я пытался получить прямой доступ к URL-адресу через браузер, он выдает мне тот же 404 ответ об ошибке.Но при проверке в POSTMAN-коде я мог видеть, что вызов идет, как показано ниже.Так может кто-нибудь, пожалуйста, дайте мне знать, как отправить вызов в тот же путь?спасибо

POST / api / test / PW / аутентификация / пользователь HTTP / 1.1

Хост: www.hostname.com X-API-Key: saksj82kqjsak290d

контроль кэша: no-cache

Почтальон-токен: 2b7fl871-195a-4782-9000-6ce269242704

Тип содержимого: multipart / form-data; border = ---- WebKitFormBoundary7MA4YWxkTrZu0gW

Содержание-Расположение: форма-данные;имя = "учетные данные"

user123

Content-Disposition: form-data;name = "password"

pass123 ------ WebKitFormBoundary7MA4YWxkTrZu0gW -

Исходное сообщение: У меня возникла проблема при получении токена из APT https Rest с использованием Javaкод.URL запроса: https://www.hostname.com/api/test/PW/authentication/user Curl: curl -X POST --header 'Content-Type: application / x-www-form-urlencoded' --header 'Accept: application / json' --header 'ApiKey: saksj82kqjsak290d -d' userid = user123 & password = pass123 '' https://www.hostname.com/api/test/PW/authentication/user' Метод: POST

Как только я отправлю запрос, я получу токен в значениях заголовка в формате JSON.Но пока я пингую сервер, я получаю 404 ответа от Java.Но с помощью инструмента POSTMAN я получаю ответ как 200 с соответствующим токеном в данных заголовка ответа.

Примечание: я изменил URL-адрес здесь на некоторый фиктивный.

До сих пор я пробовал какниже и не уверен, где я ошибся.

                    import java.net.*;
                import java.io.*;
                import java.util.*;
                import java.io.BufferedReader;
                import java.io.DataOutputStream;
                import java.io.IOException;
                import java.io.InputStreamReader;
                import java.io.UnsupportedEncodingException;
                import java.net.CookieHandler;
                import java.net.CookieManager;

                import java.net.URL;
                import java.net.URLEncoder;
                import java.util.ArrayList;
                import java.util.List;

                import java.util.Set;
                import java.net.HttpuConnection;

                import javax.net.ssl.HttpsuConnection;
                import java.lang.annotation.Retention;
                import java.net.MalformedURLException;

                public class Tokenhttps {
                    public static void main(String[] args) throws MalformedURLException {

                        int code;

                        String httpsurl = "https://www.hostname.com/api/test/PW/authentication/user";

                        String KeytoPass = "saksj82kqjsak290d";

                        try{
                              URL httpurl = new URL(httpsurl);
                              HttpuConnection uConnect = (HttpuConnection) httpurl.openConnection();

                            //Set header
                              uConnect.setDoOutput(true);
                              uConnect.setRequestMethod("POST");
                              urlConnect.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
                              uConnect.setRequestProperty("Accept", "application/json");
                              uConnect.setRequestProperty("ApiKey", KeytoPass);

                            //Set body
                              String bodydata ="{\"userid\":\"user123\",\"password\":\"pass123\"}";

                            //POST
                            DataOutputStream  dos = new DataOutputStream (uConnect.getOutputStream ());
                            dos.write(bodydata.getBytes());
                            dos.flush();

                            // Read the response.
                            InputStreamReader isr = null;
                            code = uConnect.getResponseCode();
                          System.out.println("responseCode:" + code );
                            if (code == 200) {
                                System.out.println("Connection is Success" );
                               isr = new InputStreamReader(uConnect.getInputStream());
                             //Print Header Fields
                                  System.out.println("HeaderValues :"+uConnect.getHeaderFields ());
                                                } 
                           else {
                               isr = new InputStreamReader(uConnect.getErrorStream());
                            }
                        }

                         catch(Exception errormsg){
                          System.out.println("Error: " +errormsg);
                        }   
                    }
                }

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

В коде Java bodydata - это json, но в команде curl вы передаете идентификатор пользователя и пароль в формате x-www-form-urlencoded.Скорее всего, служба ожидает более поздней версии, поэтому она не получает правильные значения, когда вы передаете ее как первую.

0 голосов
/ 21 ноября 2018

Работает с изменением ниже:

String bodaydata= "credential=user123&password=pass123";
0 голосов
/ 20 ноября 2018

Попробуйте установить свойство content-type в своем коде Java. Сервер, на который вы попали, может нуждаться в этом заголовке для обработки параметров, которые вы передаете с помощью запроса POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...