Ответы пользователя по тегу Веб-разработка
  • Как отключить encode в WebClient UploadValues?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Если параметр в Url, то можно сделать экземпляр Uri и отключить кодирование:
    var url = new Uri("http://site.com/index.php?199|&param=1", true);
    // ...
    var response = wb.UploadValues(url, "POST", data);

    Без кодирования параметров с помощью HttpClient
    using (var client = new HttpClient())
    {
      var url = new Uri("http://site.com/index.php?199|&param=1", true);
      var data = new StringBuilder();
      data.AppendLine("abc=199|");
    
      using (var content = new StringContent(data.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded"))
      {
        using (var request = new HttpRequestMessage(HttpMethod.Post, url))
        {
          request.Content = content;
    
          using (var response = client.SendAsync(request).Result)
          {
            response.EnsureSuccessStatusCode();
    
            // var result = await response.Content.ReadAsStringAsync();
            var result = response.Content.ReadAsStringAsync().Result;
          }
        }
      }
    }

    Ответ написан
    3 комментария
  • Ошибка в при получении маркера доступа к странице Graph API Explorer?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Чтобы иметь право запрашивать manage_pages нужно пройти проверку. Для этого нужно будет доказать Facebook, что это разрешение действительно нужно и показать, каким образом оно используется (сделать screencast). Практика показывает, что англоязычные запросы на проверку обрабатываются быстрее.

    См. раздел Проверка приложения.

    5b3b8d472cb04328696971.png
    Ответ написан
    Комментировать
  • Почему не срабатывает insert into через php?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    $db_table = "articles"; // Имя Таблицы БД

    Нет, не имя таблицы, а имя базы данных ($dbname).

    if (!$mysqli->query($query)) {
        printf("Errormessage: %s\n", $mysqli->error);
    }

    См. также: SQL Injection
    Ответ написан
    2 комментария
  • Как управлять состоянием полей обьекта через атрибуты?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Используйте BindingFlags:
    var managementsItems = this.GetType().GetMembers
    (
      BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
    ).Where(m => Attribute.IsDefined(m, typeof(HideAttribute))).ToList();
    Ответ написан
    Комментировать
  • Как скачать файл, в имени которого есть пробел?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    1. Попробуйте поместить имя файла в кавычки.

    2. Свойство FullName будет содержать полное имя файла, включая путь. В данном случае лучше использовать свойство Name (просто имя файла, без пути расположения).

    response.AddHeader("Content-Disposition", "attachment; filename='" + file.Name + "';");
    // или
    // response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\";");
    Ответ написан
    1 комментарий
  • Что такое web root на nginx?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Корневой каталог веб-приложения по умолчанию.

    Приложение по умолчанию будет использоваться, если не будет найдена конфигурация для запрашиваемого сайта (server_name).

    Например, при обращении к серверу по IP-адресу должен открыться сайт по умолчанию, который располагается, в вашем случае, в папке /usr/share/nginx/html.

    При обращении к серверу Toster по IP тоже выдается страничка по умолчанию: 178.248.232.5
    e2b4eab4bc194e0790b984578eef98a1.png
    Ответ написан
    Комментировать
  • В каком случае сперва отправляется OPTION затем PUT запрос?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Запросы OPTIONS отправляются для проверки возможности выполнения запроса, проверки возможностей сервера и должны отправляться всегда, когда нужно выполнить проверку.

    Сначала идет запрос OPTIONS и если ответ сервера положительный, то следом выполняется нужный запрос.
    Ответ написан
    Комментировать
  • Почему не срабатывает маршрут?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Проект точно был компилирован? Ошибок в процессе не возникало?

    Судя по маршруту, страница должна открываться по адресу:

    http://localhost:11733/meropriyatia

    Первый параметр - это имя сопоставляемого маршрута. Затем идет шаблон и значения по умолчанию.

    https://msdn.microsoft.com/ru-ru/library/dd504958(...

    Для адреса:

    http://localhost:11733/meropriyatiavnikolaeve

    маршрут должен быть таким:

    routes.MapRoute(
      "meropriyatiavnikolaeve", // имя
      "meropriyatiavnikolaeve", // шаблон
      new { controller = "Home", action = "meropriyatiavnikolaeve" }
    );
    Ответ написан
    5 комментариев
  • Как вставить php в путь ссылки?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Лучше относительно корневого каталога делать:
    <link rel="stylesheet" href="/main.css">
    Ответ написан
    Комментировать
  • Как авторизоваться с помощью одноклассников?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Ключ доступа (access_token) будет передан на страницу возврата, после авторизации пользователя.

    Этот ключ необходимо выдернуть из адресной строки браузера и использовать для работы с API.

    Вот на этой странице описан весь процесс.

    1. Необходимо сформировать адрес для авторизации на основе шаблона (в одну строку, я разбил на несколько, чтобы влезло на один экран):
    https://connect.ok.ru/oauth/authorize?client_id={clientId}&scope={scope}&
    response_type=token&redirect_uri={redirectUri}&
    layout={layout}&state={state}

    response_type=token, чтобы сервер Одноклассники вернул access_token в дополнительных параметрах (hash) страницы возврата.

    Вместо {clientId} необходимо указать идентификатор своего приложения.

    {scope} - права доступа, можно не указывать. Как минимум: VALUABLE_ACCESS;PHOTO_CONTENT, чтобы иметь возможность получить данные профиля пользователя.

    {redirectUri} - страница возврата, на которой должен быть код (в данном случае код JavaScript), который извлечет из адреса полученный ключ доступа, ну или обработает ситуацию, если в процессе авторизации произойдет какая-нибудь ошибка или пользователь откажется давать права приложению.

    {layout} - тип окна, скорее всего подойдет m - модальное окно, или a - упрощенное.

    {state} - можно указать любое свое значение, которое будет передано в исходном виде на страницу возврата. Обычно используется для передачи собственного идентификатора сессии авторизации, либо идентификатора локального пользователя, чтобы можно было понять, какой именно собственный (локальный) пользователь проходит авторизацию. Этот параметр использовать не обязательно.

    В итоге адрес страницы авторизации может быть примерно таким (в одну строку):
    https://connect.ok.ru/oauth/authorize?client_id=000000000&
    scope=VALUABLE_ACCESS;PHOTO_CONTENT&response_type=token&
    redirect_uri=https://localhost/auth_result.html&layout=m

    На локальном сервере можно создать страницу https://localhost/auth_result.html с кодом обработки результатов (см. п2).

    2. Сделать страницу возврата (redirect_uri) и написать код извлечения ключа доступа и обработку ошибок.

    При клиентской авторизации (response_type=token), сервер Одноклассники вернет параметры ответа в дополнительных параметрах документа (hash) в URL, которые можно найти в свойстве window.location.hash:
    <script>
      alert(window.location.hash);
      // берем hash из url и разбиваем на массив по символу &
      var params = window.location.hash.substr(1).split('&');
      // перебираем массив
      for (var i = 0; i < params.length; i++)
      {
        // разбиваем текущий элемент массив на новый массив по знаку =
        var p = params[i].split('=');
        // на выходе будет два элемента ключ-значение
        // проверяем имя ключа
        if (p[0] == 'access_token')
        {
          // показываем значение
          alert('Нашли ключ доступа: ' + p[1]); 
        }
      }
    </script>
    Ответ написан
  • Как защититься от передачи пользователями аккаунтов третьим лицам?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    1. Страшное пользовательское соглашение, где будет сказано, что за добровольную передачу своей учетной записи третьим лицами, запись может быть блокирована и безвозвратно удалена.

    2. Привязка к номеру телефона и вход с подтверждением по SMS.

    3. Сделать обязательным указание паспортных данные, которые будут доступны пользователю в профиле (лично). Возможность обновлять только через проверку модератором. Тогда пользователь несколько раз подумает, прежде чем добровольно передавать свои учетные данные кому-либо. Но придется и со стороны проекта усиливать меры безопасности, юридически в том числе. Проверить достоверность паспортных данных можно на сайте ФМС.

    Но это лишь усложнит процесс работы с сайтом. Все равно будет возможность выполнять задания чужими руками, даже если это придется делать в режиме реального времени по Skype.
    Ответ написан
    Комментировать
  • Как получить выполняемые запросы в браузере?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Запомнить, какие запросы были отправлены, и проверять:
    var requests = [];
    requests.push($.ajax({type: 'GET', url: '/echo/json/'}));
    requests.push($.ajax({type: 'GET', url: '/echo/json/'}));
    requests.push($.ajax({type: 'GET', url: '/echo/json/'}));
    requests.push($.ajax({type: 'GET', url: '/echo/json/'}));
    requests.push($.ajax({type: 'GET', url: '/echo/json/'}));
    
    console.log(requests);
    
    function Test(){
        $.each(requests, function(i, req){
            if(req.readyState == 0 || req.readyState == 4){
                console.log(req.status + ': ' + req.statusText);        
            }else{
                console.log(req.readyState);        
            }
        });
    }
    
    Test();
    
    window.setTimeout(Test, 3000);

    Посмотреть пример.
    Можно удалять запросы из коллекции по завершению их выполнения.
    Ответ написан
    2 комментария
  • Что такое динамический сайт?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Написано, что вы должны дать исполнителю тексты и картинки в формате JPEG, а исполнитель поместит их на сайт.

    Динамический сайт, это примерно как здесь. Вы добавили вопрос, он вывелся на сайте - это оно и есть.
    Бывают статичные сайты, их содержимое, грубо говоря, через браузер менять нельзя.
    Ответ написан
    Комментировать
  • Как сконфигурировать iis, staticContent, mimeMap для разных путей контента?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Первое:
    Лучше изначально строить структуру проекта так, чтобы файловое хранилище было независимым и при высоких нагрузках не валило основной сайт, и чтобы в будущем было проще масштабировать проект.

    Проще говоря, как минимум следует использовать разные домены/сайты для хранилищ файлов.

    Например, основной сайт:
    example.org
    А хранилище файлов:
    storage1.example.org

    Даже размещая основной сайт и хранилище(а) на одном сервере, можно будет распределить нагрузку между проектами.

    Тогда и проблема с mime отпадет сама собой.

    Второе: Если файлы выдаются серверным кодом, то достаточно добавить заголовок Content-Disposition, чтобы браузер предложил пользователю скачать файл:
    Response.AddHeader("Content-Disposition", "attachment; filename=123.gif");
    Ответ написан
    Комментировать