1. Pascal / Говнокод #13683

    +120

    1. 1
    2. 2
    3. 3
    Раз уж у нас пошла мода на анальные уроки - выложу, пожалуй, еще одну ссылку:
    
    http://avtuh.ru/2010/04/09/delphi-dopolnitelnyj-potok-v-programme.html

    На видео анальный учитель с сайта avpetuh.r доходчиво объясняет, как нужно обращаться из потока к компонентам формы.
    Долой синхронизацию!!!

    Запостил: Stertor, 27 Августа 2013

    Комментарии (15) RSS

    • Уже с самого начала доставляет эта фраза: "[в программе] всего 2 функциональные кнопочки: делают они одно и то же -вводят в мемо цифры от 1 до 10 000. Но только одна кнопочка запускает это в 1 потоке, а другая - в нескольких"
      D
      Ответить
      • Цифры от 1 до 10000... хуяссе у него система счисления... десятитысячеричная.
        Ответить
        • Борманд, раз уж ты здесь, не подскажешь, как можно подделать вот такой запрос:

          function WebForm_MyDoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
          	var postData = "__EVENTTARGET=" + "&__EVENTARGUMENT=" +
          				"&__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
          				"&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
          	var xmlRequest, e;
          	try {
          		xmlRequest = new XMLHttpRequest();
          	}
          	catch (e) {
          		try {
          			xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
          		}
          		catch (e) { }
          	}
          	var callback = new Object();
          	callback.eventCallback = eventCallback;
          	callback.context = context;
          	callback.errorCallback = errorCallback;
          	callback.async = useAsync;
          	callback.xmlRequest = xmlRequest;
          	WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
          	xmlRequest.onreadystatechange = WebForm_CallbackComplete;
          	xmlRequest.open("POST", theForm.action + (theForm.action.indexOf("?") != -1 ? "&r=" : "?r=") + Math.random(), true);
          	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
          	xmlRequest.send(postData);
          }
          ??

          генерируется какой-то цифровой код, который отправляется с запросом.
          Ответить
          • Math.random() - случайное число. Просто константу туда впердоль.
            Ответить
          • Да просто рандом там генерится, емнип, чтобы кривые кеширующие прокси херней не страдали (хотя, по хорошему POST'ы вообще кешировать нельзя).

            Вставляй в это поле рандом, или как выше пишет аноним - константу, и все будет работать.
            Ответить
          • Борманд, раз уж ты здесь, не почитаешь мне сказку на ночь?)
            Ответить
          • Большое спасибо, товарищи. Но можно подробнее, что за константу?
            Я пытался подставлять отснифанный рандом, в котором изменял 1 или 2 цифры - сервер выдавал ошибку.
            Ответить
            • Ну х.з., скорее всего в другом месте проблема. Math.random() это самый обычный рандом, ничего таинственного в нем нет.

              Может хочет, чтобы ты правильный Referer передал?

              > сервер выдавал ошибку.
              Код не запомнил?

              P.S. Предлагаю отснифать оригинальный пакет и твой пакет, и тупо сравнить их на глаз. Сразу будет видно чего не хватает.
              Ответить
              • HTTP/1.1 500 Internal Server Error

                Да, я так и делаю: снифаю, потом составляю запрос. Реферер тоже учел.
                Как я понял, происходит следующее: юзер заходит на страницу, вводит свои рег. данные затем исполняется свиток, и перенаправляет нас на нужную страницу. Но в моем случае почему-то не прокатывает.

                И еще один вопросик. В заголовке запроса написано следующее:
                POST http://www.<доменное имя>/?r=0.7682170964630175 HTTP/1.1

                Когда же я отсылаю свой запрос (Indy 10, idhttp) то в логах сниффера версия протокола бывает HTTP/1.0... Интересно, что я делаю не так?
                Ответить
                • > снифаю потом составляю запрос
                  Не, я предлагаю еще и свой отснифать, и прям все строчки сравнить у оригинального и твоего пакетов.

                  Все серваки обычно нормально едят старенький HTTP/1.0, вроде от этого проблем не должно быть.

                  > Интересно, что я делаю не так?
                  Ну возможно инди настолько древнее, что еще не знает о 1.1 ;)
                  Ответить
                  • Борманд, а что это за штука:

                    application/x-www-form-urlencoded; charset=utf-8

                    Возможно ли это отправить через tstringlist, или нужно заполнять idmultipartformdatastream?
                    Ответить
                    • Спасибо вам всем большое, дорогие товарищи, Борманд - Вам лично. Я разобрался.
                      Оказывается, просто нужно было правильно заполнить idmultipartformdatastream, указать тип и кодировку.
                      Ответить
                      • Ответить
                      • > нужно было правильно заполнить idmultipartformdatastream
                        О как. Ну я индям не обучен, последний раз их лет 10 назад видел ;)
                        Ответить
                    • Это заголовок content-type, который показывает, какого рода инфа лежит в постдате. Без него однозначно работать не будет.

                      А вот как заголовки в инди передают - я хз. Что-нибудь со словом header.

                      MultipartFormDatastream здесь по идее не нужен. Мультипарты юзают для заливки файлов на сервер и т.п...
                      Ответить

    Добавить комментарий