LINUX.ORG.RU

Сообщения bvn13

 

Отправить POST на сервер и обойти проверку CORS

Форум — Development

Есть сервис https://baza-otvetov.ru, на котором есть форма викторины https://baza-otvetov.ru/quiz

Сервер отдает на запрос к https://baza-otvetov.ru/quiz страницу html, а после загрузки выполняется следующий javascript-код

<script type="text/javascript">
    function ask(){
        $.ajax({
        cache: false,
        type: "POST",
        url: "/quiz/ask",
        data: {
        },
        beforeSend: function(){
            $(".check").html('<div style="text-align:center;"><img src="/design/images/ajaxloader.gif" /></div>');
        },
        success: function(html){
            $(".check").html(html);
        },
        error: function(){
            $(".check").html('Произошла ошибка, попробуйте обновить страницу.');
        }
        });
    }
    $(document).ready(function () {
        ask();
    });
</script>

Т.е. вопрос с ответами он подгружает POST-запросом к https://baza-otvetov.ru/quiz/ask. Так вот, я никак не могу сэмулировать этот ПОСТ-запрос.


@SpringBootApplication
public class PostrequestApplication implements CommandLineRunner {

	private static final Logger logger = LoggerFactory.getLogger(PostrequestApplication.class);
	private static final String USER_AGENT = "Mozilla/5.0";

    static final String COOKIES_HEADER = "Set-Cookie";
    static java.net.CookieManager msCookieManager = new java.net.CookieManager();


    public static void main(String[] args) {
		SpringApplication.run(PostrequestApplication.class, args);
	}

	@Override
	public void run(String... strings) throws Exception {
        logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> START <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

        System.setProperty("sun.net.http.allowRestrictedHeaders", "true");


        HttpsURLConnection get = sendGet("https://baza-otvetov.ru/quiz");
        HttpsURLConnection post = preparePostConnection("https://baza-otvetov.ru/quiz/ask", get);
        sendPost(post);
	}


    private HttpsURLConnection preparePostConnection(String url, HttpsURLConnection get) throws Exception {

        System.out.println("\nGET RESPONSE HEADERS");

        Map<String, List<String>> map = get.getHeaderFields();
        for (Map.Entry<String, List<String>> entry : map.entrySet()) {
            System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
        }


        System.out.println("POST: "+url);

        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

        con.setRequestMethod("POST");

        //set cookies
        Map<String, List<String>> headerFields = get.getHeaderFields();
        List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);

        if (cookiesHeader != null) {
            for (String cookie : cookiesHeader) {
                msCookieManager.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));
            }
        }

        if (msCookieManager.getCookieStore().getCookies().size() > 0) {
            // While joining the Cookies, use ',' or ';' as needed. Most of the servers are using ';'
            con.setRequestProperty("Cookie", join(msCookieManager.getCookieStore().getCookies(), ";"));
        }

        //add reuqest header
        con.setRequestProperty("content-length", "0");
        con.setRequestProperty("User-Agent", USER_AGENT);
        con.setRequestProperty("Accept-Language", "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7");
        //con.setRequestProperty("Access-Control-Allow-Origin", "*");
        //con.setRequestProperty("Access-Control-Allow-Credentials", "true");
        con.setRequestProperty("origin", "https://baza-otvetov.ru");
        con.setRequestProperty("referer", "https://baza-otvetov.ru/quiz");

        System.out.println("\nPOST REQUEST HEADERS");
        Map<String, List<String>> map_post = con.getHeaderFields();
        for (Map.Entry<String, List<String>> entry : map_post.entrySet()) {
            System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
        }


        return con;
    }


    private HttpsURLConnection sendGet(String url) throws Exception {

        System.out.println("GET: "+url);

        URL obj = new URL(url);
        HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

        // optional default is GET
        con.setRequestMethod("GET");

        //add request header
        con.setRequestProperty("User-Agent", USER_AGENT);

        int responseCode = con.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        //print result
        System.out.println(response.toString());

        return con;
	}


    private void sendPost(HttpsURLConnection con) throws Exception {

        // Send post request
        con.setDoOutput(true);

        int responseCode = con.getResponseCode();
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        //print result
        System.out.println("RESPONSE: "+response.toString());

    }


    public static String join(List<HttpCookie> var0, String var1) {
        StringBuffer var2 = new StringBuffer();

        for(Iterator var3 = var0.iterator(); var3.hasNext(); var2.append(var3.next().toString())) {
            if (var2.length() != 0) {
                var2.append(var1);
            }
        }

        return var2.toString();
    }

}

Все равно сервер ничего не возвращает.

Как побороть CORS?

 , , , just-for-fun, web-client

bvn13
()

А Yoba-то подражает

Форум — Talks

Извините за пикабу, но https://pikabu.ru/story/kogda_quotvodyankiquot_byili_molodyimi_5648287

Думаю, тут есть, кому захочется обсудить.

 

bvn13
()

#RuPostgres Live 6. Максим Богук, DataEgret

Форум — Development

Онлайн-митап. Ссылка: https://www.youtube.com/watch?v=kAz9sZdisnE

Начало через 10 минут.

Details
Подпишитесь на канал: https://www.youtube.com/c/RuPostgres — не пропустите трансляцию! (для этого есть «колокольчик») Там же будет чат для общения!

Очень глубокое погружение в очень продвинутый SQL.

В этот раз будет нечто ещё более безумное в плане онлaйна, чем раньше! Гигантский телемост Австралия — Калифорния — Германия — Россия %)

Подробнее о содержании митапа.

Не всегда проблемы производительности базы можно решить изменением настроек или простым созданием индексов. Когда эти простые способы не дают результата, в дело вступают более сложные техники, часто требующие переписывания запросов и тому подобной «дрессировки» оптимизатора.

С точки зрения разработчиков это отдает чёрной магией и выглядит очень сложным хакингом, однако, если разобраться в базовых принципах и научиться их комбинировать, можно добиться улучшения производительности на порядки.

Сегодняшний доклад посвещен нетривиальному использованию индексов для ускорения запросов.

Очень много внимания будет уделено обьяснению, как именно тот или иной приём работает и почему.

1. Использование INDEX ONLY SCAN для ускорения offset запросов
2. Использование индекса по (f1) для ускорения запросов ORDER BY f1, f2 LIMIT N
3. Использование индекса по (f2, f1) для ускорения запросов ORDER BY f1, f2 LIMIT N

В ближайшие месяцы будет продолжение этого доклада, посвящённое другим похожим задачам и проблемам.

 , , ,

bvn13
()

Фотографии прошлого

Форум — Talks

Просто поделюсь ресурсом, возможно, кому-то будет полезен.

http://pastvu.com/

ЗЫ. для любителей оправданий на тему «причем тут линукс»: линукс - это прекрасно, и этот ресурс тоже прекрасен.

 , ,

bvn13
()

SoftEther VPN - Connected with NAT traversal

Форум — Admin

Объясните на пальцах неадмину.

Оно типа через UDP подключиться-таки смогло, может быть нестабильно, но ладно. Почему траффик не идет через ВПН-сервер?

 , nat-traversal, , ,

bvn13
()

Правильная отдача svg для использования в качестве картинки в img

Форум — Web-development

Хочу картинки отдавать в svg. Но в беке организовал безличную отдачу файлового контента так:


@GetMapping(value = "/{fileName:.+}", produces = APPLICATION_OCTET_STREAM_VALUE)
    @ExceptionHandler(value = FileNotFoundException.class)
    public @ResponseBody
    HttpEntity<byte[]> getFileById(@PathVariable String fileName, final HttpServletResponse response) throws IOException {

        StoredFile file = this.storageService.getFileByName(fileName);
        if (file == null) {
            response.sendError(404, String.format("File %s not found", fileName));
            return null;
        }
        byte[] content;
        try {
            content = this.storageService.getFileContent(file.getPath());
        } catch (IOException e) {
            e.printStackTrace();
            if (this.userService.isCurrentUserAdmin()) {
                response.sendError(404, String.format("File %s (%s) not found", file.getName(), file.getPath()));
            } else {
                response.sendError(404, String.format("File %s not found", file.getName()));
            }
            return null;
        }

        HttpHeaders header = new HttpHeaders();
        header.setContentType(APPLICATION_OCTET_STREAM);
        header.set("Content-Disposition", "inline; filename=" + file.getName());
        header.setContentLength(file.getSize());

        return new HttpEntity<byte[]>(content, header);
    }

Когда вставляю ссыль на картинку, которую загрузил предварительно, так


<img class="skill-icon" src="/files/123" alt="Postgresql">

то она не показывается в виде картинки от слова совсем.

Если я вставляю содержимое файла svg как html, то все ок.

Как быть? Поможет ли явное указание типа контента при отдаче файла?

 , , ,

bvn13
()

Логгирование Spring двоит выдачу лога

Форум — Development

Использую

	compile('ch.qos.logback:logback-classic')
	compile('org.slf4j:slf4j-api')
	compile('org.apache.commons:commons-lang3')

логгер настроен так (файл logback.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="3 seconds">
	<contextName>VoidForum</contextName>

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>
				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{32} - %msg%n
			</pattern>
		</encoder>
	</appender>

	<jmxConfigurator />
	<root level="WARN">
		<appender-ref ref="STDOUT" />
	</root>

	<logger name="ru.bvn13.voidforum" level="ALL">
		<appender-ref ref="STDOUT" />
	</logger>

	<logger name="org.hibernate.SQL" level="WARN">
		<appender-ref ref="STDOUT" />
	</logger>
	<!--<logger name="org.hibernate.type" level="TRACE">-->
	<!--<appender-ref ref="STDOUT" />-->
	<!--</logger>-->
	<logger name="org.springframework.web" level="DEBUG">
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="ru.bvn13.voidforum.controllers" level="DEBUG">
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="ru.bvn13.voidforum.admin.controllers" level="DEBUG">
		<appender-ref ref="STDOUT" />
	</logger>
</configuration>

При этом каждая строчка вывода лога задваивается. Например:

2017-12-11 22:42:15.507 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletConfigInitParams' with lowest search precedence
2017-12-11 22:42:15.507 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletConfigInitParams' with lowest search precedence
2017-12-11 22:42:15.511 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletContextInitParams' with lowest search precedence
2017-12-11 22:42:15.511 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'servletContextInitParams' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Initialized StandardServletEnvironment with PropertySources [StubPropertySource {name='servletConfigInitParams'}, StubPropertySource {name='servletContextInitParams'}, MapPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]
2017-12-11 22:42:15.512 [main] DEBUG o.s.w.c.s.StandardServletEnvironment - Initialized StandardServletEnvironment with PropertySources [StubPropertySource {name='servletConfigInitParams'}, StubPropertySource {name='servletContextInitParams'}, MapPropertySource {name='systemProperties'}, SystemEnvironmentPropertySource {name='systemEnvironment'}]
2017-12-11 22:42:15.593 [main] INFO  ru.bvn13.voidforum.Application - Starting Application on bvn13-book with PID 20504 (C:\dev\my\VoidForum\out\production\classes started by bvn13 in C:\dev\my\VoidForum)
2017-12-11 22:42:15.593 [main] INFO  ru.bvn13.voidforum.Application - Starting Application on bvn13-book with PID 20504 (C:\dev\my\VoidForum\out\production\classes started by bvn13 in C:\dev\my\VoidForum)
2017-12-11 22:42:15.594 [main] DEBUG ru.bvn13.voidforum.Application - Running with Spring Boot v1.5.10.BUILD-SNAPSHOT, Spring v4.3.13.RELEASE
2017-12-11 22:42:15.594 [main] DEBUG ru.bvn13.voidforum.Application - Running with Spring Boot v1.5.10.BUILD-SNAPSHOT, Spring v4.3.13.RELEASE

Где напортачил? Почему так происходит?

 , logback, ,

bvn13
()

Посоветуйте телевизор

Форум — Talks

Никогда не подумал бы, что буду покупать телевизор, ибо зомбоящик как таковой в доме не держу.

Но просмотр скаченного и онлайн на ноуте уже поднадоел из-за невозможности одновременного конпеляния ядра использования ноута по его первостепенному предназначению.

Поэтому прошу совета, какие лучше, какой тип экрана, какая начинка, марка, модель, диагональ экрана, на что обратить внимание? Можно прямо ссылками на какой-нибудь ситилинк.

Из необходимых: вайфай/лан надо, и возможность смотреть онлайн/по сети.

 , ,

bvn13
()

IntelliJ IDEA и работа с GitHub

Форум — General

Как их подружить?

В настройках ИДЕА в разделе GitHub выбираю Token, генерировать, тест - все ок.

Попытка прочитать репозиторий - хер там, Host key verification failed.

Какого черта?

 , ,

bvn13
()

Доступ к базе MS Access (.mdb) из Mono C#.Net 4.5 в Linux

Форум — Development

Есть проект на С#, работает уже долго на винде. Но потребовалось перенести временно на линукс, чтобы спокойно переписать на чем-то православном.

В проекте используется соединение к базе MS Access через

OleDbConnection mdbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Password=;User ID=Admin;" + @"data source = f_base.mdb");

Как это портировать? В убунте, естественно, не находит драйвер подключения.

Есть какой-то временный костыль? Что посоветуете?

ЗЫ. Викинуть, забыть, забить, послать - это все понятино, но надо. Переписать - это тоже понятно, но время.

 , , , ,

bvn13
()

Ростелеком режет p2p

Форум — General

Сабж. На торренты хожу через friGate расширение. Вчера обнаружил, что торренты не качаются, хотя на рутрекере 14 пиров показано. Сегодня утром на работе за 5 минут все скачалось.

Провайдер онлайм (Москва), такие дела.

 , , , ,

bvn13
()

Как обновить кеш Maven для Gradle

Форум — Development

У меня в проекте не видятся последние билды из Мавена. WTF?

Вот есть версия 0.28.8 библы: https://search.maven.org/#artifactdetails|com.vladsch.flexmark|flexmark-html-...

А у меня только 0.27.0 доступна. Как быть? Нужно обновить?

repositories {
    mavenLocal()
    jcenter()
    mavenCentral()

    maven { url 'http://repo.spring.io/libs-release' }
    maven { url "http://repo.springsource.org/repo" }
}

 , ,

bvn13
()

Hibernate - Как связать в запросе две таблицы, которые физически не связаны?

Форум — Development

Ну, к примеру есть

TABLE Products
1. id
2. name

TABLE SearchParams
1. name_query

мне нужен запрос

SELECT p.name 
FROM Products AS p
LEFT JOIN SearchParams AS s
ON p.name LIKE concat('%', p.name, '%')
WHERE s.name IS NULL

Но Hibernate выдает ошибку при инициализации всего этого:

org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join!

Ему нужна связь? Как быть?

 , ,

bvn13
()

Вычисление роботов

Форум — Development

По каким признакам запроса можно определить, что стучится бот? Яндекс/Гугл/Еще кто. Может есть какие-то списки юзер-агентов? Но я где-то слышал, что яндекс-гугл умеет ходить с чужими юзер-агентами.

 , , , ,

bvn13
()

SystemD, что ты себе позволяешь?

Форум — General

Дома шуршит ArchLinux в качестве сервачка на стареньком ноуте.

Добавлял я блог как systemd-unit путем симлинка из /home/bvn13/dev/myblog.service в /etc/systemd/system/myblog.service, как говорила инструкция на арчевики. Все работало, пока я не захотел перезагрузиться.

И вот после перезагрузки я не смог удаленно по ssh зайти. Благо, автологин стоит и тимвувер в автозапуске. И что же я вижу? а sshd не запущен. И блог мой тоже. Делаю # systemctl start myblog.service, а оно говорит, мол, нет такого юнита! КАК?! Делаю # systemctl daemons-reload, и - о, чудо! - мой юнит найден и запущен. Вслед я запустил sshd.

Это что же, получается, я не туда свой юнит засунул? Или это-таки systemd виноват?

 ,

bvn13
()

Rasa NLU - кто-нибудь тыкал?

Форум — General

Rasa NLU (Natural Language Understanding) is a tool for understanding what is being said in short pieces of text. For example, taking a short message like:

«I'm looking for a Mexican restaurant in the center of town»

And returning structured data like:

intent: search_restaurant
  entities: 
    - cuisine : Mexican
    - location : center

Интересная либа. Судя по описанию, поднимается как в докере, так и нативно, общение с библиотекой посредством http-запросов.

Недавно в твиттере встретил новость про сабж, думаю, к чему бы ее такому прикрутить.

 nlu, , rasa, rasa-nlu,

bvn13
()

Камера для наблюдения с архивом.

Форум — General

Какие есть бюджетные варианты? Вплоть до собрать из составляющих и самому дистр и по накатывать.

 ,

bvn13
()

SpringBlog v2.6

Новости — Open Source
Группа Open Source

Вношу свою лепту на благо OpenSource: представляю вам, лорчане, мой форк платформы для ведения блога SpringBlog (исходный код на github).

Предыстория

Мной был найден давно заброшенный (в 2015 г.) репозиторий движка для ведения блогов студента китайского ВУЗа Jiankun LEI (aka Raysmond), написанный на SpringBoot версии 1.4.0. Проект показался мне довольно интересным, он очень шустрый (отдача страниц порядка 63 мс), к тому же, его деплой не вызвал проблем.

( читать дальше... )

>>> Исходный код

 , , ,

bvn13
()

Подтвердите баг в IntelliJ IDEA

Форум — General

Сегодня прилетела обнова, которая фиксит pinch to zoom на маках. И как-то досадно стало, ведь скроллинг тачпадом так и не завелся.

Зарепортил https://youtrack.jetbrains.com/issue/IDEA-181923 - прошу поддержать, подтвердить.

 , ,

bvn13
()

Помогите разобраться с ошибкой

Форум — Development

Проект на SpringBoot 1.5.8, шаблоны Jade templates.

Добавляю загрузку/скачивание файлов.

Отдаю файл вот таким методом:

    @GetMapping(value = "/{fileId:[\\d]+}", produces = APPLICATION_OCTET_STREAM_VALUE)
    @ExceptionHandler(value = FileNotFoundException.class)
    public @ResponseBody
    HttpEntity<byte[]> getFileById(@PathVariable Long fileId, final HttpServletResponse response) throws IOException {
        Assert.notNull(fileId);
        StoredFile file = this.storageService.getFileById(fileId);
        if (file == null) {
            response.sendError(404, String.format("File %s not found", fileId));
            return null;
        }
        byte[] content;
        try {
            content = this.storageService.getFileContent(file.getPath());
        } catch (IOException e) {
            e.printStackTrace();
            if (this.userService.currentUser().isAdmin()) {
                response.sendError(404, String.format("File %s (%s) not found", file.getName(), file.getPath()));
            } else {
                response.sendError(404, String.format("File %s not found", file.getName()));
            }
            return null;
        }

        HttpHeaders header = new HttpHeaders();
        header.setContentType(APPLICATION_OCTET_STREAM);
        header.set("Content-Disposition", "inline; filename=" + file.getName());
        header.setContentLength(file.getSize());

        return new HttpEntity<byte[]>(content, header);
    }

Когда дергаю файл, он успешно отдается в браузер, но в логе имею портянку ошибок.

Прикладываю еще WebConfig на случай, т.к. ошибка из него произрастает.

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Qualifier("viewHelper")
    @Autowired
    private ViewHelper viewHelper;

    @Autowired
    private Environment env;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
                .addResourceHandler("/webjars/**")
                .addResourceLocations("/webjars/");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(viewObjectAddingInterceptor());
        super.addInterceptors(registry);
    }

    @PostConstruct
    public void registerJadeViewHelpers(){
        viewHelper.setApplicationEnv(this.getApplicationEnv());
    }

    @Bean
    public HandlerInterceptor viewObjectAddingInterceptor() {
        return new HandlerInterceptorAdapter() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
                viewHelper.setStartTime(System.currentTimeMillis());

                return true;
            }

            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView view) {
                CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
                if (token != null) {
                    view.addObject(token.getParameterName(), token); // ВОТ ТУТ ОШИБКА НАЧИНАЕТСЯ
                }
            }
        };
    }

    public String getApplicationEnv(){
        return this.env.acceptsProfiles(ENV_PRODUCTION) ? ENV_PRODUCTION : ENV_DEVELOPMENT;
    }
}

Стек эксепшенов тут: https://pastebin.com/HcraFKTT

PS. мой вопрос в сабже

 , ,

bvn13
()

RSS подписка на новые темы