Есть страница, к которой мне нужно получить доступ после принятия Условий использования в моем поисковом роботе. Однако даже после использования URL-адреса в исходном коде:
'/auth/submitterms.do?randomNum=' + randomNum
возвращаемое тело ответа - та же страница условий и положений. Когда я делаю то же самое в Postman, он отлично работает и переводит меня к следующему
randomNum получается с помощью регулярного выражения из тела ответа. Я использовал cookieHandler API для обработки сеанса.
Фрагмент кода: Получить запрос на страницу условий и положений:
connection = new URL(URL_NEXIS+"auth/ipmdelegate.do").openConnection();
res = connection.getInputStream();
try (Scanner scanner = new Scanner(res)){
response = scanner.useDelimiter("\\A").next();
System.out.println("Terms Page: \n"+response);
}
Регулярное выражение, используемое для получения randomNum из ответа:
Pattern pattern = Pattern.compile("randomNum=[0-9].[0-9]*");
Matcher matcher = pattern.matcher(response);
if (matcher.find()) {
System.out.println(matcher.group());
randomNum = matcher.group().split(" = ")[1];
System.out.println(randomNum.toString());
} else {
throw new IOException("Error: Could not accept terms and conditions.");
}
GET-запрос к URL-адресу, который соответствует условиям "принимает".
System.out.println(URL_NEXIS + "auth/submitterms.do?randomNum = " + randomNum);
redirect_page = URL_NEXIS + "auth/submitterms.do?randomNum = " + randomNum;
connection = new URL(redirect_page).openConnection();
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
connection.setRequestProperty("Connection","keep-alive");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
res = connection.getInputStream();
Как этого добиться и почему один и тот же запрос работает с Postman по-разному?
Обновлено: Я использовал connection.setInstanceFollowRedirect (false); и смог получить код ответа 302. Теперь я вижу заголовок местоположения и переменную set-cookie. Однако я думаю, что api cookieHandler уже обрабатывает сеанс.
Теперь, когда я пытаюсь отправить запрос GET на новый URL из заголовка местоположения, я возвращаюсь на страницу условий.
Есть ли разница между скрипачом и почтальоном? Из того, что я читал, они оба используются для тестирования (http) запросов.
Это правда. но у Fiddler есть еще одна функция, которой не хватает Postman, а именно запись всего трафика, выходящего с вашего компьютера. Итак, Fiddler может записывать и показывать вам, что отправляется через трюк, когда вы запускаете свое приложение, в то время как почтальон не может. Вроде wirehark, но гораздо более дружелюбный и читаемый.
Хорошо, я использовал connection.setInstanceFollowRedirect (false); и смог получить код ответа 302. Я предполагаю, что Postman автоматически следует перенаправлениям, но даже сейчас в коде я возвращаюсь на страницу условий. Я отредактировал свой вопрос, чтобы описать его.




Вы можете использовать Скрипач для мониторинга трафика при использовании почтальона, а не при использовании вашего кода. Это поможет понять разницу между двумя случаями. telerik.com/fiddler