ASP.NET HttpHandler может обработать http 400 - Плохой Запрос?

Вот попытка с preg_match:

$pattern = "/^([^\[]+)\[([^\]]+)\]\s+\(([^,]+),\s+([^,]+),\s+([^,]+),\s+([^,]+)\)\s+(.+)$/i";
$string = "CADAVRES [FILM] (Canada : Québec, Érik Canuel, 2009, long métrage) FICTION";
preg_match($pattern, $string, $keywords);
array_shift($keywords);
print_r($keywords);

Вывод:

Array
(
    [0] => CADAVRES 
    [1] => FILM
    [2] => Canada : Québec
    [3] => Érik Canuel
    [4] => 2009
    [5] => long métrage
    [6] => FICTION
)

Попробуйте!

Распределение регулярных выражений: [ 1113]

^   anchor to start of string
 (    begin capture group 1
  [^\[]+   one or more non-left bracket characters
        )   end capture group 1
         \[   literal left bracket
           (   begin capture group 2
            [^\]]+   one or more non-right bracket characters
                  )    end capture group 2
                   \]   literal bracket
                     \s+    one or more spaces
                        \(    literal open parenthesis
                          (     open capture group 3
                           [^,]+   one or more non-comma characters
                                )     end capture group 3
                                 ,\s+     literal comma followed by one or more spaces
                                     ([^,]+),\s+([^,]+),\s+([^,]+)   repeats of the above
                                                                  \)   literal closing parenthesis
                                                                    \s+   one or more spaces
                                                                       (  begin capture group 7
                                                                        .+  everything else
                                                                           )  end capture group 7
                                                                            $ EOL

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

"Matrix:, Trilogy()   [FILM, reviewed: good]    (Canada() :   Québec  ,  \t Érik Canuel , ): 2009 ,   long ():():[][]métrage) FICTIO  , [(:N";

правильно обрабатывает как:

Array
(
    [0] => Matrix:, Trilogy()   
    [1] => FILM, reviewed: good
    [2] => Canada() :   Québec  
    [3] => Érik Canuel 
    [4] => ): 2009 
    [5] => long ():():[][]métrage
    [6] => FICTIO  , [(:N
)

Попробуйте!

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

9
задан alexandrul 24 May 2009 в 18:38
поделиться

3 ответа

Если Вы знаете то, что вызывает эти 400, то Вы можете настраивать поведение http.sys с помощью реестра для контакта с ним:

http://support.microsoft.com/kb/820129

Однако необходимо знать, что существует потенциальная безопасность и разветвления производительности выполнения этого.

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

2
ответ дан 3 November 2019 в 07:14
поделиться

Если Ваш пользовательский клиент заставляет IIS инициировать HTTP 400, он, вероятно, испорчен и не отправляет действительные Запросы HTTP согласно стандарту. Если бы можно изменить клиент, это был бы правильный поступок. Иначе то, с чем Вы работаете, не является HTTP, и IIS разработан для обработки Запросов HTTP. Поэтому необходимо выполнить пользовательский сервер для собственного протокола (который является нестандартным HTTP как вещь).

Не рекомендуется использовать IIS/ASP.NET для обрабатывания такого запроса, поскольку это могло бы вызвать некоторые странные неожиданные вещи произойти.

1
ответ дан 3 November 2019 в 07:14
поделиться

Вместо этого я бы попросил их исправить пользовательское программное обеспечение клиента. Дайте им отчет, показывающий неудавшиеся запросы. Если вы можете, запустите сниффер, например Wireshark, и отправьте им пакеты, если они не уверены, что проблема в их программном обеспечении.

2
ответ дан 3 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: