2012-05-26 13 views
26

Intento crear una secuencia de comandos python que envíe una POST con parámetros para extraer el resultado. Whith violinista, he extraído la solicitud de publicación que devuelvo que quiero. El sitio web usa solo https.python enviar POST con cabecera

POST /Services/GetFromDataBaseVersionned HTTP/1.1 
Host: www.mywbsite.fr 
"Connection": "keep-alive", 
"Content-Length": 129, 
"Origin": "https://www.mywbsite.fr", 
"X-Requested-With": "XMLHttpRequest", 
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
"Content-Type": "application/json", 
"Accept": "*/*", 
"Referer": "https://www.mywbsite.fr/data/mult.aspx", 
"Accept-Encoding": "gzip,deflate,sdch", 
"Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4", 
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
"Cookie": "ASP.NET_SessionId=j1r1b2a2v2w245; GSFV=FirstVisit=; GSRef=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CHgQFjAA&url=https://www.mywbsite.fr/&ei=FZq_T4abNcak0QWZ0vnWCg&usg=AFQjCNHq90dwj5RiEfr1Pw; HelpRotatorCookie=HelpLayerWasSeen=0; NSC_GSPOUGS!TTM=ffffffff09f4f58455e445a4a423660; GS=Site=frfr; __utma=1.219229010.1337956889.1337956889.1337958824.2; __utmb=1.1.10.1337958824; __utmc=1; __utmz=1.1337956889.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 

{"isLeftColumn":false,"lID":-1,"userIpCountryCode":"FR","version":null,"languageCode":"fr","siteCode":"frfr","Quotation":"eu"} 

Y ahora mi script en Python:

#!/usr/bin/env python 
# -*- coding: iso-8859-1 -*- 
import string 
import httplib 
import urllib2 

host = "www.mywbsite.fr/sport/multiplex.aspx" 
    params='"isLeftColumn":"false","liveID":"-1","userIpCountryCode":"FR","version":"null","languageCode":"fr","siteCode":"frfr","Quotation":"eu"' 

headers = { Host: www.mywbsite.fr, 
"Connection": "keep-alive", 
"Content-Length": 129, 
"Origin": "https://www.mywbsite.fr", 
"X-Requested-With": "XMLHttpRequest", 
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
"Content-Type": "application/json", 
"Accept": "*/*", 
"Referer": "https://www.mywbsite.fr/data/mult.aspx", 
"Accept-Encoding": "gzip,deflate,sdch", 
"Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4", 
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
"Cookie": "ASP.NET_SessionId=j1r1b2a2v2w245; GSFV=FirstVisit=;  GSRef=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CHgQFjAA&url=https://www.mywbsite.fr/&ei=FZq_T4abNcak0QWZ0vnWCg&usg=AFQjCNHq90dwj5RiEfr1Pw; HelpRotatorCookie=HelpLayerWasSeen=0; NSC_GSPOUGS!TTM=ffffffff09f4f58455e445a4a423660; GS=Site=frfr; __utma=1.219229010.1337956889.1337956889.1337958824.2; __utmb=1.1.10.1337958824; __utmc=1; __utmz=1.1337956889.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 

} 

url = "/Services/GetFromDataBaseVersionned" 

# POST the request 
conn = httplib.HTTPConnection(host,port=443) 
conn.request("POST",url,params,headers) 
response = conn.getresponse() 

data = response.read() 
print data 

Pero cuando corro mi guión, tengo este error:

socket.gaierror: [Errno -2] Name or service not known 
+6

No hay una buena razón para hablar HTTP manualmente. Use urllib o incluso mejor, [** requests **] (http://docs.python-requests.org/). – ThiefMaster

Respuesta

37

Muchas gracias por su enlace para el módulo de peticiones. Es simplemente perfecto. Debajo de la solución en mi problema.

import requests 
import json 

url = 'https://www.mywbsite.fr/Services/GetFromDataBaseVersionned' 
payload = { 
    "Host": "www.mywbsite.fr", 
    "Connection": "keep-alive", 
    "Content-Length": 129, 
    "Origin": "https://www.mywbsite.fr", 
    "X-Requested-With": "XMLHttpRequest", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5", 
    "Content-Type": "application/json", 
    "Accept": "*/*", 
    "Referer": "https://www.mywbsite.fr/data/mult.aspx", 
    "Accept-Encoding": "gzip,deflate,sdch", 
    "Accept-Language": "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4", 
    "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", 
    "Cookie": "ASP.NET_SessionId=j1r1b2a2v2w245; GSFV=FirstVisit=; GSRef=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CHgQFjAA&url=https://www.mywbsite.fr/&ei=FZq_T4abNcak0QWZ0vnWCg&usg=AFQjCNHq90dwj5RiEfr1Pw; HelpRotatorCookie=HelpLayerWasSeen=0; NSC_GSPOUGS!TTM=ffffffff09f4f58455e445a4a423660; GS=Site=frfr; __utma=1.219229010.1337956889.1337956889.1337958824.2; __utmb=1.1.10.1337958824; __utmc=1; __utmz=1.1337956889.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)" 
} 
# Adding empty header as parameters are being sent in payload 
headers = {} 
r = requests.post(url, data=json.dumps(payload), headers=headers) 
print(r.content) 
+4

No define los encabezados en su código – gies0r

+0

¿Por qué está enviando el encabezado como los datos de la solicitud y por qué eso funciona? –

+0

@Matt eres el SEÑOR !!!! – Max

Cuestiones relacionadas