Bonjour tous,

Je suis en train de développer un robot en python pour extraire des données sur un site sécurisé.

le site sécurisé est sur internet et je suis derriere un proxy sur un réseau local.

Petite particularité, ce site n'est accessible qu'au travers de certificats.


Mon code est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
from mechanize import Browser
 
host = 'www.myserver.com:443'
site_id="https://www.myserver.com/"
 
br=Browser()
br.set_proxies({"https": "http://my-proxy.company.com:8088","http": "http://my-proxy.company.com:8088"})
br.add_client_certificate(host,"certs/certificate_key.pem","certs/certificate.pem")
br.set_debug_http(True)
 
print "in test.py"
 
br.open(site_id)
En l'executant, j'obtient ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
in test.py
connect: (my-proxy.company.com, 8088)
send: 'GET <a href="https://www.myserver.com/" target="_blank">https://www.myserver.com/</a> HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: <a href="http://www.myserver.com\r\nConnection:" target="_blank">www.myserver.com\r\nConnection:</a> close\r\nUser-Agent: Python-urllib/2.5\r\n\r\n'
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: Cache-Control: no-cache
header: Pragma: no-cache
header: Content-Type: text/html; charset=utf-8
header: Proxy-Connection: close
header: Connection: close
header: Content-Length: 691
Traceback (most recent call last):
  File "./test.py", line 67, in <module>
    br.open(site_id)
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 203, in open
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 254, in _mech_open
mechanize._response.httperror_seek_wrapper: HTTP Error 400: Bad Request
J'ai testé ce même code sur un serveur qui n'avait pas besoin de proxy et il fonctionne.

Par ailleurs, la librairie mechanize que j'utilise (0.1.7b) semble être une traduction de ce que fait la lib www::mechanize de perl.
L'erreur 400 étant commune dans ce contexte perl, la solution passait par une variable à unseté. "https"

Je n'ai pas trouvé d'équivalent pour mechanize python, mais le comportement semble bien similaire.

Es-ce que quelqu'un a déjà rencontré ce genre de problème? et résolu ...

Merci pour vos réponses et aides.
Poupoune