handelsregister

command line interface for handelsregister.de
git clone https://git.ce9e.org/handelsregister.git

commit
6bfb01f8b9efc2f62deef28f92d42ccb1e2f203e
parent
1a7f663f0a80f5a50015a7c1cacbcde225c3fc0e
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2025-12-07 14:27
requests: use session as context manager

Diffstat

M handelsregister.py 90 ++++++++++++++++++++++++++++++------------------------------

1 files changed, 45 insertions, 45 deletions


diff --git a/handelsregister.py b/handelsregister.py

@@ -26,17 +26,18 @@ REGISTERS = {
   26    26 
   27    27 
   28    28 def search(terms, register=''):
   29    -1     r = requests.post(
   30    -1         'https://www.handelsregister.de/rp_web/erweitertesuche.xhtml',
   31    -1         data={
   32    -1             **SEARCH_DEFAULTS,
   33    -1             'form:registerArt_input': register,
   34    -1             'form:schlagwoerter': terms,
   35    -1             'form:schlagwortOptionen': 1,
   36    -1             'form:aenlichLautendeSchlagwoerterBoolChkbox_input': 'on',
   37    -1         }
   38    -1     )
   39    -1     r.raise_for_status()
   -1    29     with requests.Session() as session:
   -1    30         r = session.post(
   -1    31             'https://www.handelsregister.de/rp_web/erweitertesuche.xhtml',
   -1    32             data={
   -1    33                 **SEARCH_DEFAULTS,
   -1    34                 'form:registerArt_input': register,
   -1    35                 'form:schlagwoerter': terms,
   -1    36                 'form:schlagwortOptionen': 1,
   -1    37                 'form:aenlichLautendeSchlagwoerterBoolChkbox_input': 'on',
   -1    38             }
   -1    39         )
   -1    40         r.raise_for_status()
   40    41 
   41    42     soup = BeautifulSoup(r.content, features='html.parser')
   42    43     for item in soup.select('[data-ri]'):
@@ -47,40 +48,39 @@ def search(terms, register=''):
   47    48 
   48    49 
   49    50 def get_xml(register, id):
   50    -1     s = requests.Session()
   51    -1     r = s.post(
   52    -1         'https://www.handelsregister.de/rp_web/erweitertesuche.xhtml',
   53    -1         data={
   54    -1             **SEARCH_DEFAULTS,
   55    -1             'form:registerArt_input': register,
   56    -1             'form:registerNummer': id,
   57    -1         },
   58    -1     )
   59    -1     r.raise_for_status()
   60    -1 
   61    -1     field = None
   62    -1     for x in re.findall(r'PrimeFaces.addSubmitParam\([^)]*', r.text):
   63    -1         if 'Global.Dokumentart.SI' in x:
   64    -1             field = re.search(r"ergebnissForm:selectedSuchErgebnisFormTable:[^']*", x)[0]
   65    -1             break
   66    -1     if not field:
   67    -1         raise ValueError
   68    -1 
   69    -1     view_state = re.search(r'<update id="j_id1:javax.faces.ViewState:0"><!\[CDATA\[([-0-9]*:[-0-9]*)\]\]></update>', r.text)[1]
   70    -1     action = re.search('action="([^"]*)"', r.text)[1]
   71    -1 
   72    -1     r2 = s.post(
   73    -1         f'https://www.handelsregister.de{action}',
   74    -1         data={
   75    -1             'ergebnissForm': 'ergebnissForm',
   76    -1             'javax.faces.ViewState': view_state,
   77    -1             'property': 'Global.Dokumentart.SI',
   78    -1             field: field,
   79    -1         },
   80    -1     )
   81    -1     r2.raise_for_status()
   82    -1 
   83    -1     return r2.text
   -1    51     with requests.Session() as session:
   -1    52         r = session.post(
   -1    53             'https://www.handelsregister.de/rp_web/erweitertesuche.xhtml',
   -1    54             data={
   -1    55                 **SEARCH_DEFAULTS,
   -1    56                 'form:registerArt_input': register,
   -1    57                 'form:registerNummer': id,
   -1    58             },
   -1    59         )
   -1    60         r.raise_for_status()
   -1    61 
   -1    62         field = None
   -1    63         for x in re.findall(r'PrimeFaces.addSubmitParam\([^)]*', r.text):
   -1    64             if 'Global.Dokumentart.SI' in x:
   -1    65                 field = re.search(r"ergebnissForm:selectedSuchErgebnisFormTable:[^']*", x)[0]
   -1    66                 break
   -1    67         if not field:
   -1    68             raise ValueError
   -1    69 
   -1    70         view_state = re.search(r'<update id="j_id1:javax.faces.ViewState:0"><!\[CDATA\[([-0-9]*:[-0-9]*)\]\]></update>', r.text)[1]
   -1    71         action = re.search('action="([^"]*)"', r.text)[1]
   -1    72 
   -1    73         r2 = session.post(
   -1    74             f'https://www.handelsregister.de{action}',
   -1    75             data={
   -1    76                 'ergebnissForm': 'ergebnissForm',
   -1    77                 'javax.faces.ViewState': view_state,
   -1    78                 'property': 'Global.Dokumentart.SI',
   -1    79                 field: field,
   -1    80             },
   -1    81         )
   -1    82         r2.raise_for_status()
   -1    83         return r2.text
   84    84 
   85    85 
   86    86 def get_parser():