HttpURLConnection возвращает код ответа 500 после отправки запроса GET, даже если он работает локально - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь отправить HTTP-запрос GET для загрузки файла с сервера в рамках теста Selenium.

Если я делаю это локально через любой браузер, он работает и возвращает HTTP OK 200 и файл загружается, но когда я пытаюсь отправить квест, используя класс HttpURLConnection, это не так.

Используемый мной метод:

    static sendGET(String URL){
        URL obj = new URL(URL)
        CookieHandler.setDefault(new CookieManager())
        Authenticator.setDefault (new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication ("login", "password".toCharArray());
            }
        })
        HttpURLConnection con = (HttpURLConnection) obj.openConnection()
        HttpURLConnection.setFollowRedirects(true)
        con.setRequestMethod("GET")
        con.setRequestProperty("User-Agent", "Mozilla/5.0")
        int responseCode = con.getResponseCode()
        System.out.println("GET Response Code :: " + responseCode)
        return responseCode
    }

GET Response Код :: 500

Из журналов сервера я получил:

CRITICAL 08:51:39   php     Call to a member function getId() on null

{
    "exception": {}
}

Строка, в которой вызывается getId (): @ AndiCover

$response = $transmitter->downloadFile($fileID, $this->getUser()->getId());

This make кажется проблемой для аутентификации пользователя.

Я также пытался использовать класс HttpGet, но результат был таким же.

1 Ответ

0 голосов
/ 23 марта 2020

Разобрался с проблемой, вот и все.

Ну, в чем проблема? Оказалось, что в моем запросе отсутствует заголовок Cook ie, который мог бы аутентифицировать пользователя, и, если быть точным, c, это был PHPSESSID. Чтобы получить текущий PHPSESSID, я создал метод, который извлекает все куки-файлы и затем подстроку PHPSESSID:

static getPhpSessionID(){
    String cookies = driver.manage().getCookies()
    System.out.println("Cookies: ${cookies}")
    cookies = cookies.substring(cookies.lastIndexOf("PHPSESSID=") + 10)
    cookies = cookies.substring(0, cookies.indexOf(";"))
    System.out.println("${cookies}")
    return cookies
}

Сначала он печатает все куки-файлы:

Cookies: [PHPSESSID = 2ohpfb3jmhtddcgx1lidm5zwcs; Путь = /; domain = domain.com]

И затем это подстроки PHPSESSID:

2ohpfb3jmhtddcgx1lidm5zwcs

После этого мне нужно было изменить мой метод sendGET:

String sessionID = getPhpSessionID()
con.setRequestProperty("Cookie", "PHPSESSID=${sessionID}")

И результат был:

GET Response Code :: 200

Надеюсь, это поможет кому-то в будущем:)

...