2012-05-26 21 views
26

Próbuję zbudować skrypt Pythona, który wysyła POST z parametrami do wyodrębnienia wyniku. Whith skrzypek Mam wyodrębnić post, który zwraca, że ​​chcę. Witryna korzysta tylko z https.Python wysłać POST z nagłówkiem

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"} 

A teraz mój skrypt 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 

Ale gdy uruchamiam mój scenariusz, mam ten błąd:

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

Nie ma żadnego powodu, aby mówić ręcznie HTTP. Użyj urllib lub jeszcze lepiej, [** requests **] (http://docs.python-requests.org/). – ThiefMaster

Odpowiedz

37

dziękuję za link do modułu żądań. Jest po prostu idealny. Poniżej rozwiązanie mojego problemu.

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

Nie definiujesz nagłówków w kodzie – gies0r

+0

Dlaczego wysyłasz nagłówek jako dane żądania i dlaczego to działa? –

+0

@Matt jesteś PANEM !!!! – Max

Powiązane problemy